Webpack 排除文件夹

Posted

技术标签:

【中文标题】Webpack 排除文件夹【英文标题】:Webpack Exclude folder 【发布时间】:2017-10-12 08:52:41 【问题描述】:

我正在通过 Webpack 推送一个相当大的应用程序,它从两个库文件夹中提取:第三方和 node_modules。我已经为 js 文件设置了这样的规则:


    test: /\.js$/,
    loader: 'babel-loader',
    include: [
      /src\/js\/client/
    ],
    exclude: [
      /node_modules/,
      /thirdparty/
    ]
  

我希望 webpack 不会解析这两个目录中的任何一个目录下的任何文件夹,但我收到的库错误。例如:

WARNING in ./~/durandal/js/system.js
51:8-15 Critical dependency: require function is used in a way in which dependencies cannot be statically extracted

WARNING in ./~/durandal/js/system.js
52:8-15 Critical dependency: require function is used in a way in which dependencies cannot be statically extracted

ERROR in ./~/durandal/js/system.js
Cannot statically analyse 'require(..., ...)' in line 278
 @ ./src/js/client/lib/durandal/overrides/views.js 2:0-37
 @ ./src/js/client/index.js

我是否误解了包含/排除的功能,或者这是 Webpack 的错误?

【问题讨论】:

在 webpack 中包含 durandal 是否有更好的解决方案? 不——不幸的是,webpack 2+ 使它不可行 【参考方案1】:

这些规则并不决定 webpack 正在解析哪些文件,而是仅适用于包含并满足条件的文件。即使您根本没有规则,webpack 仍然会解析相同的文件,因为您将它们导入到某个地方。

您可以使用externals 选项将模块排除在捆绑之外。这些外部必须以某种方式在运行时出现(例如加载到<script> 标记中)。

如果你只是想让 webpack 不解析文件,但仍然包含它们,你可以配置 module.noParse。但正如文档所述,它们不应包含任何导入。

【讨论】:

我的整个程序就是console.log('hello world')。没有导入或其他任何东西,但 webpack 仍在处理 laravel 供应商文件夹中的文件。配置界面很差。

以上是关于Webpack 排除文件夹的主要内容,如果未能解决你的问题,请参考以下文章

如何排除目录被 Webpack 捆绑?

工作箱 webpack 插件从预缓存清单中排除文件夹

如何从 WebPack 包中排除目录

使用 webpack 为 react-lottie 从主包中排除 JSON 文件

如何从 Webpack 捆绑 JS 文件中排除 style-loaders、css-loader 源代码?

从业力中排除 scss 文件