webpack多配置打包

233 阅读2分钟

开发的时候遇到一个问题,webpack怎么配置让es6的导入导出打包的时候转成commonjs的导入导出并且也保留es6导入导出,如果在开发一个库,需要同时支持ES模块和CommonJS模块,这样可以根据自己的环境选择导入方式。

如何实现同时保留两种模块系统?可以生成两个不同的打包文件,一个用CommonJS,另一个保留ES6。这样在package.json中通过exports字段指定不同的入口。这就需要配置多个Webpack输出,或者使用不同的配置分别打包。

如何生成ES模块的输出? Webpack 5+支持输出ES模块,这需要设置experiments.outputModule和相关配置。同时,Babel这边可能需要不同的preset配置,比如不转换模块语法,让Webpack来处理。

还需要注意,在生成ES模块时,要确保Webpack不会自动添加一些CommonJS的包装代码,可能需要设置output.module为true或者其他相关选项。同时,代码中不能混用import和module.exports,否则会导致出现不兼容的问题。

最后,要确保在package.json中正确设置type、main和exports字段,以便Node.js和其他工具能够正确识别模块类型。同时,测试在两种环境下的导入是否正常工作,避免出现意外错误。

总结下来,就是是通过两个不同的Webpack配置分别生成CommonJS和ES模块的包,使用Babel处理语法但不转换模块语法,配置Webpack的输出格式,并在package.json中指定双入口。同时,注意代码规范和polyfill的添加,确保兼容性。

(webpack使用最新版的)webpack.config.js

image.png

配置 package.json

image.png

最后npm run build打包,看到输出就打包成功了,会生成对应的文件

image.png

image.png