如何防止mini-css-extract-plugin创建js entrypint

时间:2018-08-29 08:06:36

标签: express webpack mini-css-extract-plugin

我对表达+ webpack相对较新,因此我不清楚是否打算这样做,以及是否正确配置它。问题在于使用mini-css-extract-plugin时创建的附加资产和入口点。

Webpack配置:

Extract = require('mini-css-extract-plugin');
path = require('path');
Write = require('write-file-webpack-plugin');

module.exports = {
  mode: 'development',
  entry: {
    demo_scripts: path.resolve('server', 'scripts', 'demo.js'),
    demo_styles: path.resolve('server', 'styles', 'demo.css')
  },
  output: {
    path: path.resolve('.tmp'),
    filename: '[name].js'
  },
  plugins: [new Write(), new Extract()],
  module: {
    rules: [
      {
        test: /\.js$/,
        use: [
          {
            loader: 'babel-loader',
            options: {
              presets: ['babel-preset-env']
            }
          }
        ]
      },
      {
        test: /\.css/,
        use: [
          {
            loader: Extract.loader
          },
          {
            loader: 'css-loader'
          }
        ]
      }
    ]
  }
};

Webpack输出

          Asset      Size        Chunks             Chunk Names
demo_scripts.js  3.91 KiB  demo_scripts  [emitted]  demo_scripts
demo_styles.css  36 bytes   demo_styles  [emitted]  demo_styles
 demo_styles.js  3.89 KiB   demo_styles  [emitted]  demo_styles
Entrypoint demo_scripts = demo_scripts.js
Entrypoint demo_styles = demo_styles.css demo_styles.js

我的问题是,为什么创建demo_styles.js?尽管正在提取css,但似乎webpack仍在使用css创建捆绑的js,但是当我查看该文件时,其中的唯一一行是

eval("// extracted by mini-css-extract-plugin\n\n//# sourceURL=webpack:///./server/styles/demo.css?");

有人可以帮忙解释一下这里发生了什么吗?

更新

如果我删除demo_styles入口点,并通过插件init对其进行配置,则不会构建CSS资源。

({
  plugins: [
    new Write(),
    new Extract({
      filename: 'demo_styles.css'
    })
  ]
});

Asset      Size        Chunks             Chunk Names
demo_scripts.js  3.91 KiB  demo_scripts  [emitted]  demo_scripts
Entrypoint demo_scripts = demo_scripts.js

此处的存储库(请注意快递分支)https://github.com/brewster1134/bumper/tree/express

2 个答案:

答案 0 :(得分:0)

请从您创建demo_styles的入口点中删除demo_styles.js

相反,您可以像这样注入css文件:

plugins: [
      new MiniCssExtractPlugin({
        filename: 'demo_styles.css',
      }),

让我知道问题是否仍然存在,很高兴为您提供帮助

答案 1 :(得分:-1)

有两种解决方法来解决您的问题。对于两者,您都需要更改Webpack配置文件的entry点。我个人更喜欢第一种选择。

选项1:

entry更改为以下内容:

entry: {
    demo: [
        path.resolve('server', 'scripts', 'demo.js'),
        path.resolve('server', 'styles', 'demo.css'),
    ]
}

这将生成以下输出(基于您为Extract类和output部分提供的文件名:

  • demo.js
  • demo_styles.css

选项2:

对于此选项,您需要从entry点删除CSS文件并将其导入JS文件中:

webpack.config.js

...
entry: path.resolve('server', 'scripts', 'demo.js'),
...

demo.js

import './../styles.demo.css'
//rest of your JS codes

此解决方案将生成与Option1相同的输出