0

如果我使用的是开发模式,样式加载器可以正常工作。style但是当我构建项目并且我有 dist 文件夹时,我在标签中看不到head标签。有趣的是,只有当bundle.js文件以dist.

我的配置:

const path = require('path')
const webpack = require('webpack')
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');

const extractSASS = new ExtractTextPlugin({
  filename: './css/[name].css',
  allChunks: true
});

var entry = [
  'babel-polyfill',
  './src/index.js'
]

var output = {
  path: path.join(__dirname, 'dist'),
  filename: 'js/bundle.js',
  publicPath:'/static/'
}

var rules = [
  {
    use: 'babel-loader',
    include: __dirname,
    exclude:[
      path.resolve(__dirname, "node_modules"),
    ],
    test: /\.js$/
  },
  {
    test: /\.(scss|css)$/,
    use: process.env.NODE_ENV == 'production'
      ? extractSASS.extract({
        fallback: 'style-loader',
        use: ['css-loader','sass-loader']
      })
      : [ 'style-loader', 'css-loader', 'sass-loader']
  }
]

if(process.env.NODE_ENV != 'production') entry.push('webpack-hot-middleware/client')

const dev = {
  devtool: 'cheap-module-eval-source-map',
  entry: entry,
  output: output,
  plugins: [
    extractSASS,
    new webpack.optimize.OccurrenceOrderPlugin(),
    new webpack.HotModuleReplacementPlugin()
  ],
  module: {
    rules: rules
  }
}

const prod = {
  entry: entry,
  output: output,
  plugins: [
    extractSASS,
    new webpack.optimize.OccurrenceOrderPlugin(),
    new webpack.optimize.UglifyJsPlugin(),
    new CopyWebpackPlugin([{from:'src/img', to:'img'}]),
    new webpack.DefinePlugin({
      'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV)
    })
  ],
  module: {
    rules: rules
  }
}

module.exports = process.env.NODE_ENV == 'production' ? prod : dev;

有谁知道什么会导致问题?谢谢。

4

1 回答 1

0

问题出在 HMR 中。正如您在配置中看到的,在生产中我们不使用 HMR。所以,当我们的包被创建时,我们的标记会抓住这个包。这个包对 sass 的变化没有任何想法(因为它不包含 hmr 的东西),所以我们看不到 style 标签。解决方案是在以开发模式运行之前删除捆绑包。

于 2018-02-10T22:12:04.583 回答