library选项
- webpack的配置文件中的output对象中的library选项允许我们将模块导出的内容作为库暴露给外部使用
- library用于指定库的名称,可以是字符串,字符串数组或对象
- 如果是字符串,则导出成库被使用时,该字符串会作为全局变量暴露给浏览器环境
- 如果是一个字符串数组,则当有多入口时,为每个入口增加全局变量
- 如果是一个对象,则可以指定导出名称和导出方式
module.exports = {
// …
entry: {
a: './src/a.js',
b: './src/b.js',
},
output: {
filename: '[name].js',
library: ['MyLibrary', '[name]'], // name is a placeholder here
},
};
<script src="https://example.org/path/to/a.js"></script>
<script src="https://example.org/path/to/b.js"></script>
<script>
MyLibrary.a.hello('webpack');
MyLibrary.b.hello('webpack');
</script>
library.type
var: 将库导出为一个变量,该变量在全局作用域下可用
assign: 将库导出为一个变量,该变量在全局作用域下可用,但可以被其他库或模块覆盖
this: 将库导出为一个变量,该变量在this对象上可用
window: 将库导出为一个变量,该变量在window对象下可用(仅在浏览器环境下有效)
global: 将库导出为一个变量,该变量在global对象上可用(仅在node环境下有效)
commonjs: 将库导出为一个commonjs模块,该模块在node环境下可用
commonjs2: 将库导出为一个commonjs2模块,该模块在node环境下可用
amd: 将库导出为一个AMD模块,该模块在浏览器环境下可用
umd: 将库导出为一个umd模块,该模块可以在浏览器,node环境下可用
externals
- externals选项用于指定哪些模块应该被视为外部模块,不应该打包到bundle中
- externals可以是对象,字符串,正则表达式,或者函数
字符串:表示要排除的模块名称
正则表达式:表示要排除的模块名称与正则表达式匹配的模块
函数:在函数中判断哪些模块应该排除,返回一个布尔值表示是否排除该模块
对象:键表示要排除的模块名称,值表示在哪种环境下使用该模块,例如:commonjs,commonjs2,amd等
webpack-node-externals
webpack-node-externals是一个npm包,它可以帮助我们排除Node.js应用程序中不需要打包的第三方模块。与webpack的externals选项类似,webpack-node-externals也可以将指定的模块排除在webpack打包之外,从而减小输出的bundle体积,提高应用程序的加载速度
nodeExternals函数将返回一个排除所有node_modules中的模块的externals对象。这样,所有的node_modules中的模块都将被排除在webpack打包之外
mini-css-extract-plugin
mini-css-extract-plugin是一个webpack插件,用于将CSS样式从JavaScript代码中提取出来,并将其保存为单独的CSS文件
npmignore
- .npmignore是一个用于指定npm包发布时忽略哪些文件或目录的文件,它类似于.gitignore文件
- 在发布npm包时,如果没有指定.npmignore文件,npm会默认将当前目录下的所有文件都发布到npm仓库中,这样会包含很多不必要的文件或目录,增加npm包的体积和下载时间
环境区分
- mode用于指定webpack打包模式
- mode可以设置为none、development、production
环境区分
- --
mode 用于设置模块内的process.env.NODE_ENV(只能在模块中拿到值,在webpack配置文件中拿不到)
cross-env 用于设置node环境变量(跨平台,在模块,webpack配置文件中都可以拿到)
DefinePlugin 用来设置模块内的全局变量