1.entry与ouput的根本配置
这里咱们持续解说一下这两个配置项:
...entry:{ main:'./src/index.js'},...output:{ filename:'bundle.js', path:path.resolve(__dirname,'dist')}
1.1 打包多个文件并输入
咱们有一个新的需要,心愿把index.js打包两次,别离生成两个文件,一个叫main,第二次叫sub,这里entry能够这样配置:
entry:{ main:'./src/index.js', sub:'./src/index.js'}
这里间接打包必定失败的,因为咱们的output的filename只有一个bundle.js文件,能不能依据entry的配置来主动生成output,能够利用占位符:
output:{ filename:'[name].js'}
同时webpack会主动把这两个js文件引入到生成的index.html中:
// index.html...<script src='main.js'></script><script src='sub.js'></script>
1.2 为HTML的JS援用增加公共域名
这样一个场景,打包完的index.html文件会给后端,作为网页入口文件,而那些js文件会上传到CDN中,网页加载的时候再拉下来。
这时候咱们就心愿打包实现的index.html可能主动索引到JS文件地址,加上CDN域名:
// index.html...<script src='http://cdn.com/main.js'></script><script src='http://cdn.com/sub.js'></script>
咱们就能够配置output的publicPath配置项:
output:{ publicPath:'http://cdn.com.cn/ ...}
其余更多的配置项都能够参考官网文档来深刻学习~
2. sourceMap的配置
2.1 什么是sourceMap
sourceMap其实是形容的一种映射关系(基于map文件),当你的代码出错的时候,不关上sourceMap的话出错行只会定位到打包后的JS文件的地位。
如果你想要打包后debug的log也能定位到源代码的行数时就须要关上sourceMAp了
例如:他晓得dist目录上面的main.js文件的96行实际上对应src目录下index.js文件中的第1行!
2.2 sourceMap的应用
development状态下sourceMap默认是开启的,然而你能够通过配置devtool字段来配置不同模式:
module.exports = { ... devtool:'none' //敞开sourcemap}
devtool不同的参数代表了sourcemap不同的配置,会影响打包速度:
这里build代码配置devtool不同项之后build速度会如何变动,配置source-map会影响打包速度,然而对于debug有用。
并且咱们在打包目录上面会发现一个main.js.map文件,他其实就通过这个文件做了一个映射
2.3 其余类型SourceMap配置介绍
inline-source-map
配置了这个devtool之后其实就是把main.js.map配置成一个base64的字符串放到main.js的底部
cheap-inline-source-map
这里咱们看一下cheap这个前缀,其实这些都能够自由组合。
乍看一下如同没什么区别,然而这个cheap实际上代表map源代码的精确度,不加cheap会通知你在源代码哪一行哪个字符出错了。加了cheap只会通知你哪一行。
这样其实打包性能会有进步,尤其是打包源代码很多的时候!这也是为什么cheap的build是fast的意思。
同时也不会管非业务代码的谬误,例如loader外面的,第三方模块外面映射的。
cheap-module-source-map
这个module前缀意思就是依然会治理loader,第三方模块外面的谬误~
eval前缀
eval是打包类型最快的形式,乍看如同打包完也没啥区别。
咱们看一下dist目录中发现没有了map文件,底部也没有base64,然而存在一个eval函数,他其实是通过eval这个函数来执行的,打包速度很快,然而对于简单的代码这种形式可能谬误提醒不全面。
2.4 最佳实际
思考到咱们在开发环境对sourceMap的要求是:快(eval),信息全(module),且因为此时代码未压缩,咱们并不那么在意代码列信息(cheap),开发环境下最好是应用:cheap-module-eval-source-map,这种形式提醒较全,打包速度快。
线上环境(mode为production),个别不须要一个sourceMap的映射,然而也心愿能疾速定位问题,咱们能够配置一个cheap-module-source-map。
如果你并不心愿任何人都能够在浏览器间接看到咱们未编译的源码,不应该间接提供sourceMap给浏览器。但咱们又须要sourceMap来定位咱们的错误信息, 这时咱们能够设置hidden-source-map:
一方面webpack会生成sourcemap文件以提供给谬误收集工具比方sentry,另一方面又不会为 bundle 增加援用正文,以防止浏览器应用。
这一块记得这个最佳实际就差不多了。
2.5 映射原理
这里感兴趣理解原理的同学能够参考这里深刻学习一下:
https://zhuanlan.zhihu.com/p/...