Почему я не могу собрать это приложение nuxtjs в докере, пока работают локальные сборки? - PullRequest
0 голосов
/ 04 июня 2018

Я разрабатываю этот проект nuxtjs на Mac (все самые последние и лучшие), и локальные сборки и генерация работают нормально.Я использую sass-loader в качестве зависимости разработчика, и мой nuxt.config.js файл не очень отличается от значения по умолчанию:

module.exports = {
  head: {
    title: 'temp-www',
    meta: [
      { charset: 'utf-8' },
      { name: 'viewport', content: 'width=device-width, initial-scale=1' },
      { hid: 'description', name: 'description', content: 'Nuxt.js project' }
    ],
    link: [
      { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }
    ]
  },
  modules: [
    [ 'nuxt-fontawesome', {
      component: 'fa',
      imports: [
        { set: '@fortawesome/fontawesome-free-brands' },
      ]
    }],
  ],
  loading: { color: '#3B8070' },
  build: {
    extend (config, { isDev, isClient }) {
      if (isDev && isClient) {
        config.module.rules.push({
          enforce: 'pre',
          test: /\.(js|vue)$/,
          loader: 'eslint-loader',
          exclude: /(node_modules)/
        })
      }
    }
  }
}

Затем я создал Dockerfile, как это

FROM node:stretch

ENV NODE_ENV=production
ENV HOST=0.0.0.0

RUN mkdir -p /app
COPY . /app
WORKDIR /app

EXPOSE 3000

RUN npm install
RUN npm run build
CMD ["npm", "start"]

(и соответствующий .dockerignore), но я получаю следующую ошибку при построении изображения.

ERROR in ./layouts/default.vue
Module not found: Error: Can't resolve 'sass-loader' in '/app/layouts'
 @ ./layouts/default.vue 2:2-436
 @ ./.nuxt/App.js
 @ ./.nuxt/index.js
 @ ./.nuxt/client.js

Там и в других файлах .vue я использую sass в блоке, подобном <style lang="scss">.Я попытался изменить это значение на sass, но это не имеет значения.

Странно, этот вопрос говорит, что он должен работать, делая sass-loader и node-sass как deps времени выполнения, а не devtime deps,Я скептически пытался это сделать, и это ухудшалось, пока я не изменил атрибут lang в блоках style на scss вместо sass.В этом случае, и только в этом случае, я получил правильно построенное изображение.

Чего мне не хватает?

1 Ответ

0 голосов
/ 04 июня 2018

Вы должны установить sass-loader для веб-пакета:

npm install sass-loader --save-dev

(см. Официальный документ о том, «Как использовать препроцессоры» (например, sass): https://nuxtjs.org/faq/pre-processors/)


Но если установить для переменной среды NODE_ENV значение «production», npm install будет игнорировать devDependencies.

Таким образом, вы можете установить в качестве основной зависимости:

npm install sass-loader --save

Правильный путь - это продолжать использовать как dev dev и строить свое приложение на CI, а затем развертывать его в своей рабочей среде с NODE_ENV "production"

...