Webpack Dev Server не компилируется при изменении (импортированный CSS)

У меня есть следующая структура папок

src/
  assets/
    css/
      subfolder/
        imported.css
      main.css (-> imports "imported.css" with "postcss-import")
  components/
    Component1.vue
  App.vue (imports "main.css")
  main.js

я использую vue-loader составить .vue файлы. В App.vue я импортирую main.css файл (который импортирует несколько других файлов CSS, например, нормализовать и простую сеточную систему, с postcss-import).

<template>

</template>

<script>

</script>

<style src="./assets/css/main.css"></style>

Чтобы скомпилировать все, я использую Webpack и Webpack Dev Server со следующей конфигурацией:

var path = require('path')
var webpack = require('webpack')

module.exports = {
  entry: './src/main.js',
  output: {
    path: path.resolve(__dirname, './dist'),
    publicPath: '/dist/',
    filename: 'build.js'
  },
  module: {
    rules: [
      {
        test: /\.vue$/,
        loader: 'vue-loader',
        options: {
          postcss: [
            require('postcss-import')(),
            require('postcss-cssnext')(),
            require('postcss-reporter')()
          ]
        }
      },
      {
        test: /\.js$/,
        loader: 'babel-loader',
        exclude: /node_modules/
      },
      {
        test: /\.(png|jpg|gif|svg)$/,
        loader: 'file-loader',
        options: {
          name: '[name].[ext]?[hash]'
        }
      }
    ]
  },
  resolve: {
    extensions: ['.js', '.css', '.vue']
  },
  devServer: {
    historyApiFallback: true,
    noInfo: true
  },
  performance: {
    hints: false
  },
  devtool: '#eval-source-map'
}

Это прекрасно работает для каждого файла, кроме моего imported.css файл. Всякий раз, когда я изменяю и сохраняю его, Webpack (Dev Server) не перекомпилирует мои ресурсы. Я должен вручную переключиться на мой main.css файл или любой .vue сохранить файл, чтобы перекомпилировать. Есть ли способ перекомпилировать активы, даже если я сохраню imported.css файл?

1 ответ

Старые версии postcss-import принял addDependencyTo опция, но она устарела для более новых версий, используемых в сочетании с postcss-loader, хотя мне интересно, если это все еще может быть актуальным в вашем случае.

Вы должны передать контекст загрузчика и postcss-import назвал бы ctx.addDependency сказать Webpack, что imported.css это зависимость main.css,

Без этого вы бы получили то поведение, которое испытываете, что Webpack не отслеживает и не перекомпилирует изменения в импортированных модулях.

Другие вопросы по тегам