【问题标题】:how to prevent mini-css-extract-plugin from creating a js entrypint如何防止 mini-css-extract-plugin 创建 js 入口点
【发布时间】:2019-02-03 22:50:24
【问题描述】:

我对 express + 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 入口点,并通过插件初始化对其进行配置,则不会构建任何 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

repo 在这里(注意 express 分支)https://github.com/brewster1134/bumper/tree/express

【问题讨论】:

  • webpack 了解从入口点分析 AST 的依赖关系。你的 css 必须包含在你的依赖树中,也就是说,demo.css 必须包含在 demo.js 中

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


【解决方案1】:

Webpack 将所有内容提取到一个 js 文件中,然后 MiniCssExtractPlugin 将其从该文件中取出,留下一个带有 // extracted by mini-css-extract-plugin 的空白 js 文件。

我的解决方案是将你的css和js分组到webpack.config.js的入口部分

entry: {
    demo: {
        import: [ path.join("server", "scripts", "demo.js"), path.join("server", "styles", "demo.css") ],
        filename: "demo.js", // outputs demo.js, demo.css to your output directory
    },
    main: {
        import: [ path.join("server", "scripts", "main.js"), path.join("server", "styles", "main.css") ],
        filename: "main.js", // outputs main.js, main.css to your output directory
    },
}

另外,命名效果很好,将其用于您的插件部分:

plugins: [
    new MiniCssExtractPlugin({
        filename: "[name].css"
    }),
],

相应地调整包“demo”和“main”以及路径。

【讨论】:

    【解决方案2】:

    有两种解决方法可以解决您的问题。两者都需要更改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 相同的输出

    【讨论】:

      【解决方案3】:

      请从您的入口点删除demo_styles,这是创建demo_styles.js

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

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

      如果问题仍然存在,请告诉我,很乐意提供帮助

      【讨论】:

      • 我已经尝试过基于该插件的文档,但是没有入口点,根本没有构建任何 css。我添加了这些结果的更新
      • 可以通过github分享吗?
      • 将 repo 链接添加到 OP 的底部 :)
      猜你喜欢
      • 2019-01-29
      • 2020-08-18
      • 2020-11-17
      • 2020-09-26
      • 2019-10-06
      • 2018-08-30
      • 2023-01-05
      • 2019-12-24
      • 2018-08-26
      相关资源
      最近更新 更多