5

问题

是否有任何 Webpack 配置专家能够告诉我为什么我不能在运行时将我的 css 提取到 dist 文件夹中npm run build?回购在这里:https ://github.com/damodog/webpack4-boilerplate

更多信息

总而言之,我一直在研究Webpack Guide 文档,一切进展顺利。js 和 css 分别通过<link><script>标签注入到我的 index.html 文件中。我已经安装了各种加载器、插件等,并将我的配置分成通用(共享)、开发和产品文件(根据文档),生活很好。

我碰巧做了一些调整,包括查看代码拆分动态导入npm run build、为路径添加别名、将 js 移动到 js 文件夹等,并注意到当我突然运行构建时,我的 css 没有被添加到 dist 文件夹中。我恢复了动态导入内容的试用更改,并尝试恢复其他更改,但仍然遇到同样的问题。令人讨厌的是,此时我还没有添加 git,所以没有清楚地了解我为找到我所做的更改所做的“调整”。

发生什么了

当我运行我的监视任务npm start时,styles.scss 文件(导入到主 index.js 文件中)被编译到 css 中,并且在我的本地主机中查看时,生成的 app.css 文件被注入到 index.html 页面中。所有的肉汁。 <link href="css/app.css" rel="stylesheet">

当我运行npm run buildcss 文件应该被复制到 dist 文件夹时,应该添加一个哈希 id 并且 css 应该被缩小。这是有效的(就像我上面说的那样),我可以在构建步骤中看到 css 文件(参见下面的第一个资产。顺便说一句,与下一个屏幕截图相比,这里忽略了 js 捆绑文件的差异。这是我玩代码拆分的时候)。

在此处输入图像描述

现在,当我运行它时,css 没有捆绑在一起(见下文)。

在此处输入图像描述

我认为这可能与 mini-css-extract-plugin 有关,但我已根据文档使用高级配置示例进行了配置(我已将他们的示例拆分为一个配置文件,因为我有单独的配置dev 和 prod 的文件)。

我真的不明白为什么会这样。帮助我的读者。你是我唯一的帮助...

4

1 回答 1

3

我克隆了您的存储库并进行了试验。在您的package.json中,您已设置:sideEffects: false。这会导致导入的样式表在摇树过程中丢失。这在文档中有所描述

“副作用”定义为在导入时执行特殊行为的代码,而不是暴露一个或多个导出。这方面的一个例子是 polyfill,它影响全局范围并且通常不提供导出。

请注意,任何导入的文件都会受到树抖动的影响。这意味着如果您在项目中使用 css-loader 之类的东西并导入 CSS 文件,则需要将其添加到副作用列表中,以免在生产模式下无意中丢弃它

因此,将您的副作用更改package.json"sideEffects: ["./src/scss/styles.scss"],在生产模式下它将输出到目标文件夹。

于 2019-02-15T20:19:13.870 回答