vuestorefront/vue-storefront

Nuxt Generate failure due to invalid alias setting

aimeb1 opened this issue · 1 comments

Environment

OS: Windows-WSL2-Ubuntu 22.04
Node: 14.17 Docker Image: FROM mcr.microsoft.com/devcontainers/javascript-node:14
Project Version: V1.5.0 https://github.com/vuestorefront-community/spree
Package Manager: yarn
Builders: webpack,babel,rollup

User Config:

target: 'static',
// ssr: true,

buildModules: [
['@vue-storefront/nuxt-theme', {
routes: false,
generate: {
replace: {
apiClient: '@vue-storefront/spree-api',
composables: '@vue-storefront/spree'
}
}
}]

router: {

extendRoutes(routes, resolve) {
  routes.splice(0, routes.length);
  // routes.push(...getRoutes());
  routes.push({
    name: 'custom',
    path: '*',
    component: resolve(__dirname, '_theme/pages/HomePre.vue')
  })
}

},

generate: {
crawler: false,
routes: ['/HomePre']
}

Runtime Modules:
@vue-storefront/nuxt
nuxt-i18n
cookie-universal-nuxt
vue-scrollto/nuxt
@vue-storefront/middleware/nuxt

Build Modules:
@nuxtjs/composition-api/module
@nuxt/typescript-build
@nuxtjs/google-fonts
nuxtjs/pwa
@nuxtjs/style-resources
@vue-storefront/spree/nuxt
@vue-storefront/nuxt
@vue-storefront/nuxt-theme

Reproduction

Using V1.5.0 from V1.5.0 https://github.com/vuestorefront-community/spree along with nuxt config changes above. I modified root package.json scripts to include a generate command:

"scripts": {
"generate": "yarn build:api-client && yarn build:composables && yarn generate:theme",
"generate:theme": "cd packages/theme && yarn generate",

I run 'yarn generate' and get the following in the log which seems 'ok' except maybe for the warning that @vue-storefront/nuxt should only be specified once (it is included in both the Modules and Build Modules).

ℹ VSF Starting Vue Storefront Nuxt Module 16:20:29
✔ VSF Installed Vue Storefront Context plugin 16:20:29
✔ VSF Installed Vue Storefront SSR plugin 16:20:29
✔ VSF Installed VSF Logger plugin 16:20:29
✔ VSF Installed Vue Storefront E2E testing plugin 16:20:29
✔ VSF Installed Internationalization Cookies plugin 16:20:29
✔ VSF Installed StorefrontUI Module 16:20:29
✔ VSF Installed Performance Module 16:20:29
ℹ VSF Using raw source/ESM for @vue-storefront/spree 16:20:29
ℹ VSF Using raw source/ESM for @vue-storefront/core 16:20:29
ℹ VSF Using raw source/ESM for @storefront-ui/vue 16:20:29
ℹ VSF Using raw source/ESM for @storefront-ui/shared 16:20:29
ℹ VSF Starting Theme Module 16:20:29
ℹ VSF Watching changes in @vue-storefront/nuxt-theme-module and used platform theme directory
ℹ VSF Adding theme files... 16:20:29

WARN Modules should be only specified once: @vue-storefront/nuxt 16:20:29

ℹ VSF Starting Vue Storefront Nuxt Module 16:20:29
✔ VSF Installed Vue Storefront Context plugin 16:20:29
✔ VSF Installed Vue Storefront SSR plugin 16:20:29
✔ VSF Installed VSF Logger plugin 16:20:29
✔ VSF Installed Vue Storefront E2E testing plugin 16:20:29
✔ VSF Installed Internationalization Cookies plugin 16:20:29
✔ VSF Installed StorefrontUI Module 16:20:29
✔ VSF Installed Performance Module 16:20:29
ℹ VSF Using raw source/ESM for @storefront-ui/vue 16:20:29
ℹ VSF Using raw source/ESM for @storefront-ui/shared 16:20:29
✔ VSF Added 58 theme file(s) to _theme folder 16:20:29
ℹ Middleware starting.... 16:20:30
ℹ Loading integrations... 16:20:30
ℹ - Loading: spree @vue-storefront/spree-api/server 16:20:30
✔ - Integration: spree init function Start! 16:20:30
✔ - Integration: spree init function Done! 16:20:30
ℹ - Loading: spree extension: tokenExtension 16:20:30
✔ - Integration: spree loaded! 16:20:30
✔ Integrations loaded! 16:20:30
✔ Middleware created! 16:20:30
ℹ Production build 16:20:31
ℹ Bundling for server and client side 16:20:31
ℹ Target: static 16:20:31
✔ Builder initialized 16:20:31
✔ Nuxt files generated 16:20:32

Describe the bug

The errors in the console come during the build step of the yarn generate command.
I included only the 1st 'Module not found' error in the log below although there are many others.

Additional context

After some debugging I noticed the error seems to come down to a bad definition of the ~ alias. The imports in the default.vue layout references this alias:
import AppFooter from '~/components/AppFooter.vue';

The generate.js file from @vue-storefront/nuxt-theme defines these aliases:

  this.extendBuild((config) => {
    delete config.resolve.alias['~'];
    config.resolve.alias['~/middleware'] = path.join(projectLocalThemeDir, path.sep + 'middleware');
    config.resolve.alias['~/components'] = path.join(projectLocalThemeDir, path.sep + 'components');
    config.resolve.alias['~/assets'] = path.join(projectLocalThemeDir, path.sep + 'assets');
    config.resolve.alias['~'] = path.join(projectLocalThemeDir);
  });

However, the projectLocalThemeDir variable has a value of:
"/app/packages/theme/node_modules/.cache/nuxt"

This directory does not contain the AppFooter.vue. Shouldn't this variable be set to:
"/app/packages/theme"?

Logs

✖ Client
  Compiled with some errors in 2.50m

◯ Server
  


Hash: 841c6ee3096dce0e5bd7
Version: webpack 4.46.0
Time: 150056ms
Built at: 11/07/2023 4:23:05 PM
                              Asset      Size  Chunks               Chunk Names
                         1860f5b.js  2.33 KiB       2  [immutable]  runtime
                         1c35cc3.js   304 KiB       3  [immutable]  vendors/app
                         3e9cb0d.js   155 KiB       4  [immutable]  
                         5dacf3e.js  19.5 KiB       5  [immutable]  
                         5fa6669.js  5.13 KiB       7  [immutable]  
                         9374600.js   112 KiB       0  [immutable]  app
                           LICENSES  1.93 KiB                       
                         a8af1e3.js  4.05 KiB       6  [immutable]  
                         fbc4d41.js   259 KiB       1  [immutable]  commons/app
          img/layers-2x.8f2c4d1.png  1.23 KiB          [immutable]  
        img/marker-icon.2b3e1fa.png  1.43 KiB          [immutable]  
img/product_placeholder.6d9cbdf.svg  1.54 KiB          [immutable]  
Entrypoint app = 1860f5b.js fbc4d41.js 1c35cc3.js 9374600.js

ERROR in ./_theme/layouts/default.vue?vue&type=script&lang=js& (/app/node_modules/babel-loader/lib??ref--2-0!/app/node_modules/vue-loader/lib??vue-loader-options!/app/node_modules/unplugin/dist/webpack/loaders/transform.js??ref--14-0!./_theme/layouts/default.vue?vue&type=script&lang=js&)
Module not found: Error: Can't resolve '~/components/AppFooter.vue' in '/app/packages/theme/_theme/layouts'
 @ ./_theme/layouts/default.vue?vue&type=script&lang=js& (/app/node_modules/babel-loader/lib??ref--2-0!/app/node_modules/vue-loader/lib??vue-loader-options!/app/node_modules/unplugin/dist/webpack/loaders/transform.js??ref--14-0!./_theme/layouts/default.vue?vue&type=script&lang=js&) 31:0-51 48:15-24
 @ ./_theme/layouts/default.vue?vue&type=script&lang=js&
 @ ./_theme/layouts/default.vue
 @ ./node_modules/.cache/nuxt/App.js
 @ ./node_modules/.cache/nuxt/index.js
 @ ./node_modules/.cache/nuxt/client.js
 @ multi ./node_modules/.cache/nuxt/composition-api/register.js ./node_modules/.cache/nuxt/client.js
.
.
.

 FATAL  Nuxt build error                                                      16:23:05

  at WebpackBundler.webpackCompile (/app/node_modules/@nuxt/webpack/dist/webpack.js:2127:21)
  at processTicksAndRejections (internal/process/task_queues.js:95:5)
  at async WebpackBundler.build (/app/node_modules/@nuxt/webpack/dist/webpack.js:2076:5)
  at async Builder.build (/app/node_modules/@nuxt/builder/dist/builder.js:327:5)
  at async ensureBuild (/app/node_modules/@nuxt/cli/dist/cli-generate.js:144:3)
  at async Object.run (/app/node_modules/@nuxt/cli/dist/cli-generate.js:282:7)
  at async NuxtCommand.run (/app/node_modules/@nuxt/cli/dist/cli-index.js:413:7)

Making this change to index.js appears to fix the issue:

  // const projectLocalThemeDir = this.options.buildDir.replace('.nuxt', targetDirectory);
  const path = require('path');
  const projectLocalThemeDir = path.join(this.options.rootDir, path.sep + targetDirectory);