webpack 中的 node_modules 文件处理

阅读时长 5 分钟读完

在现代的前端开发中,使用诸如 Node.jsnpm 等工具来管理依赖已经成为了常态。当我们使用 webpack 进行打包构建时,webpack 会默认扫描项目中的 node_modules 文件夹并将其作为依赖项进行处理。然而,node_modules 文件夹下的文件数量庞大且复杂,它们在 webpack 中的处理方式可能会带来一些问题,本文将深入探讨如何处理这些文件。

自动加载模块

在 webpack 中,我们可以直接 importrequire 引用模块,例如:

这样做的好处是方便,但坏处是它会导致所有引用的模块被打包构建到最终的输出文件中,这造成了所有 node_modules 的代码都被放进了 bundle,最终使得 bundle 变得非常大。

解决这个问题的方法是使用 externals 选项来告诉 webpack 那些模块应该作为外部依赖。我们可以在配置文件中这样设置:

这样,webpack 就会将 lodash 模块剔除出 bundle 并用全局的 _ 变量替换它的引用。

排除文件的处理

有时候,我们并不需要对所有的 node_modules 下的代码进行打包构建。例如,当我们使用某个特定的库时,它可能会被内联到页面中,所以我们不需要对它进行打包。又或者,我们并不想处理第三方模块的样式文件,因为它们已经被打包成 CSS 文件了。

针对这些情况,webpack 设计了 excludeinclude 选项来控制文件的处理范围。例如,我们可以这样配置:

-- -------------------- ---- -------
-------------- - -
  -----
  ------- -
    ------ --
      ----- --------------
      -------- ----------------------------------
      ---- -
        ------- --------------
      -
    --
  -
-

这里我们的意图是排除 node_modules 和 bower_components 中的所有文件,这些文件不会被 babel-loader 处理。通过这样的配置,我们可以得到更加精简的构建文件,减少打包的时间和文件大小。

结论

在本文中,我们深入探讨了 webpack 处理 node_modules 文件夹中代码的一些技巧和方法。通过使用这些方法,我们可以在打包和构建时更加灵活地处理各种场景下的依赖、插件和库。如果你正在使用 webpack,这些方法绝对值得一试。

示例代码

下面是一个完整的 webpack 配置文件,其中包括了我们前文提到的一些示例代码:

-- -------------------- ---- -------
----- ------- - -------------------
----- ---- - ----------------

-------------- - -
  ------ -----------------
  ------- -
    ----- ----------------------- --------
    --------- -----------
  --
  ------- -
    ------ --
      ----- --------
      -------- ----------------------------------
      ---- -
        ------- --------------
      -
    -- -
      ----- ---------
      ---- -
        ---------------
        ------------
      -
    --
  --
  ---------- -
    -- --- ------ ---------- -- --
    ------- ---
  --
  -------- -
    --- ---------------------------------
  -
--

本配置文件做的事情是:

  • 将 entry.js 打包进 dist/bundle.js 中
  • 使用 babel-loader 编译 js 文件,但是不包括 node_modules 和 bower_components 下的文件
  • 使用 style-loader 和 css-loader 处理 css 文件
  • 将 lodash 模块排除出打包
  • 使用 UglifyJS 插件优化代码

压缩后的输出文件是以这样的方式使用的:

-- -------------------- ---- -------
--------- -----
------
  ------
    ---
  -------
  ------
    ------- --------------------------------------------------------------------
    ------- -------------------------
  -------
-------

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/671dd0199babaf620fb84646

纠错
反馈