javascript - Webpack 中的排除选项与入口点

标签 javascript node.js webpack config

如果 Webpack 中有一个入口点,这是否意味着 Webpack 只会捆绑和转换该入口点中的文件或该入口点需要的文件?然后,这将自动否定或排除该入口点文件不需要的文件,对吗?为什么在 node_modules 中的文件的加载器配置中仍然需要排除选项?这不是你的入口点中的 required,所以我认为 webpack 会完全忽略这些文件,或者我缺少一些魔法吗?如果您没有排除选项,加载程序是否会自动尝试转换项目中的所有文件?

最佳答案

这些规则不包含任何文件,但它们将加载程序应用于满足条件的任何导入模块。规则上的 exclude 选项仅决定加载程序是否应处理已导入的文件。

node_modules 通常被排除在 .js 规则之外,因为通常没有理由转换它们,因为大多数包在发布之前就已经被转译了。必须处理您正在使用的整个 node_modules ,将大大增加构建时间,即使它只是一个加载器,至少它必须解析模块并返回一个有效的模块,这已经需要一些时间了。

excludeinclude 选项还有其他用途。例如,您可以决定使用 CSS modules对于您的项目,但您有一些依赖于常规(全局)CSS 的第三方库,并且您无法轻松更改使用 CSS 的代码。您可以定义以下规则:

{
  // For all .css files except the ones in 3rd-party-lib
  test: /\.css$/,
  exclude: /3rd-party-lib/,
  use: [
    'style-loader',
    { loader: 'css-loader', options: { modules: true } }
  ]
},
{
  // For all .css files in 3rd-party-lib
  test: /\.css$/,
  include: /3rd-party-lib/,
  use: ['style-loader', 'css-loader']
}

这可能是任何事情,从更改一个选项到使用一组完全不同的加载器,即使文件类型可能相同。

关于javascript - Webpack 中的排除选项与入口点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43701840/

相关文章:

javascript - 我是否需要担心管理 html5 localStorage 的大小,或者是否会自动删除最近最少使用的项目?

javascript - NestJS:记录 HttpService 调用的请求/响应?

javascript - 如何在 sqlite3 db.get 和 db.all 中使用 async/await?

webpack - watchOptions.ignored 和 webpack.WatchIgnorePlugin 有什么区别

javascript - 从 Fetch Response 对象中获取文本

javascript - ReactJS 传递回调导致未定义

javascript - 单击链接的文本

javascript - 如何正则表达式匹配双下划线,但不是单下划线(__不是_)

javascript - vueJS + webpack : importing fonts, CSS 和 node_modules

javascript - 如何让 Karma + Webpack 找到模块?