内容简介:说过了entry,与之相对应的便是output目录
说过了entry,
与之相对应的便是output
output出口
目录
配置 output 选项可以控制 webpack 如何向硬盘写入编译文件。注意,即使可以存在多个入口起点,但只指定一个输出配置。
output的配置项要比entry多
具体详细的配置,可以 参考
filename
打包输出的文件名,默认值为main.js
webpack.config.js
const path =require('path') module.exports = { context: path.resolve(__dirname, "src"), entry: "./index.js", output: { filename: "[name].js" } };
[name],是占位符,入口名是什么,[name]就是什么
entry名称的缺省值是main,则name的值就是main
如果entry使用数组,名称被缺省,output自然也是main
当然以不使用占位符
output: { filename: "bundle.js" }
那么dist下就会生成bundle.js
filename的配置支持多种占位符
[hash]
[chunkhash]
[contenthash]
[id]
[name]
[query]
[function]
我们先看下这个三个hash的区别
hash
output: { filename: "bundle.[hash].js" }
hash是项目级别的,什么意思?
即每次修改任何一个文件,所有文件名的hash至都将改变。所以一旦修改了任何一个文件,整个项目的文件缓存都将失效。所以对于没有改变的模块而言,这样做显然不恰当,因为缓存失效了。此时,chunkhash的用途随之而来。
chunkhash
output: { filename: "bundle.[chunkhash].js" }
只有被修改了的文件的文件,chunkhash值才会修改
contenthash
当使用ExtractTextWebpackPlugin这个插件时,
这个插件时用来分离css的,在使用时hash
和chunkhash不会起作用,此时要使用contenthash
hash(chunkhash,contenthash)的长度可以使用 [hash:16](默认为20)来指定。或者,通过指定output.hashDigestLength 在全局配置长度。
[id]
id是唯一标示,不会重复,从0开始
[name]
name 是模块名称,是你自己起的,在配置路由懒加载的时候可以自己命名
[function]
function,做动态配置的时候会用到。
例如根据不同的环境会有不同的输出
const path =require('path') function filenameFun(){ //....一些判断逻辑,不同的环境不同配置 return "bundle.[hash:8].js" } module.exports = { context: path.resolve(__dirname, "src"), entry: "./index.js", output: { filename: filenameFun } };
[query]
模块的 query,例如,文件名 ? 后面的字符串
没用过,使用方法和场景,官网也没有做详细介绍
先打断一下
我们现在要对package.json,做一下修改
"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "build:dev": "cross-env NODE_ENV=development webpack --config webpack.config.js --progress ", "build:prod": "cross-env NODE_ENV=production webpack --config webpack.config.js --progress " },
cross-env是用来兼容各个平台而使用的
以上配置是用来区分打包环境
现在继续filename
修改webpack.config.js
const path =require('path') function filenameFun(){ if( process.env.NODE_ENV === "development"){ return "static/js/bundle.js" }else{ return "static/js/bundle.[chunkhash].js" } } module.exports = { context: path.resolve(__dirname, "src"), entry: "./index.js", output: { filename: filenameFun } };
我们修改了filename的输出路径
"static/js/bundle.js"
删除dist,执行npm run build:dev
打包成功后,dist目录下会生成一个static目录,static目录下有个js文件夹,然后是bundle.js文件
filename支持指定路径输出
chunkFilename
此选项决定了非入口 chunk 文件的名称,
什么场景需要呢?
模块异步加载,路由懒加载,这样的文件是没有被列在entry中的
path
path是配置输出文件存放在本地的目录,字符串类型,是绝对路径
const path =require('path') module.exports = { context: path.resolve(__dirname, "src"), entry: "./index.js", output: { path: path.resolve(__dirname, 'dist/static'), filename: "js/bundle.js" }, };
效果相同
publicPath
静态资源远程地址(CDN)
默认值是一个空串
在多数情况下,此选项的值都会以/结束。
总结
本文介绍了一些关于output的常用api
* filename,输出的文件名,支持多种占位符,支持配置路径
* 介绍了三种hash(hash,chunkhash,contenthash)的区别
* chunkFilename,非入口 chunk 文件的名称,配置懒加载和异步模块的文件名
* path,是配置输出文件存放在本地的目录,字符串类型,是绝对路径
* publicPath 静态资源的远程地址,在配置CDN时会用到
以上所述就是小编给大家介绍的《webpck4.x系列-output》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Java Script深度剖析
卢云鹏、沈维伦、Don Gosselin、李筱青 / 卢云鹏、沈维伦、李筱青 / 北京大学出版社 / 2004-10-1 / 49.0
本书适合于大中专院计算机相关专业作为教材,也是JavaScript初学者以及JavaScript爱好者的理想参考用书。书中详细介绍了基本的JavaScript程序设计原理以及实现它们的语法,内容包括JavaScript简介,变理、函数、对角和事件,数据类型、运算符,结构化逻辑控制结构和语句,窗口和框架,表单,动态HTML和动画,cookie和安全性,服务器端 JavaScript,数据库连接,使用......一起来看看 《Java Script深度剖析》 这本书的介绍吧!