Webpack配置无externals时为何未将node内置模块path打包进产物
问题原因
你配置中target设置为node时,Webpack默认会将Node.js原生核心模块(如path、fs、http等)判定为外置依赖,不会将其打包进产物,而是直接保留原始require语句,这是Webpack针对Node运行环境的默认优化逻辑,与是否手动配置externals无关。
解决方案
如果需要强制将Node原生核心模块打包进产物,按以下步骤修改配置即可:
- 安装对应原生模块的polyfill包,以
path为例,需要安装path-browserify:
npm install path-browserify --save-dev
- 修改Webpack配置,关闭Node核心模块默认外置预设,同时配置polyfill映射:
let config = { mode: 'none', // 若最终运行环境为Node可保留target: 'node',运行环境为浏览器则改为target: 'web' target: 'node', entry: { output: `/example.js`, }, resolve: { extensions: ['.js'], // 配置原生模块对应的polyfill包路径 fallback: { path: require.resolve('path-browserify') } }, output: { path: './dist', }, // 关闭Node核心模块默认外置的预设规则 externalsPresets: { node: false } };
修改后重新执行打包,path模块的完整代码就会被打包进最终产物,不再保留require('path')语句。如果需要打包其他Node原生核心模块,只需要安装对应模块的polyfill,并在resolve.fallback中新增对应映射即可。
内容的提问来源于stack exchange,提问作者Sherif eldeeb
相关产品推荐
相关产品推荐

