webapck是什么?学习重点:在于配置和使用(工具)
前端代码为何要进行构建和打包? | 代码层面 :
- 体积更小(Tree-Shaking、压缩、合并, 加载更快
- 编译高级语言或语法(TS、ES6+、模块化、scss)
- 兼容性和错误检查(Polyfill、postcss、eslint)
| 研发流程:
- 高效的开发环境
- 统一的构构建流程和产出标准
- 集成公司构建规范(提测、上线)
| | —- | —- |module、chunk、bundle 分别什么意思, 有何区别?
3. loader和plugin的区别?
4. webpack 如何实现懒加载?
5. webpack 常⻅性能优化?
6. babel-runtime和babel-polyfill的区别?
webpack使用优化
1. 使用别名。 alise
resolve: {alias: {'@views': path.resolve(__dirname, 'src/views'),moment: 'moment/min/moment-width-locales.min.js'}}
2. 忽略对已知模块解析。noParse 实践??
过滤不需要解析的文件,比如打包的时候依赖了三方库(jquyer、lodash)等,而这些三方库里面没有其他依赖,可以通过配置noParse不去解析文件,提高打包效率RegExp [RegExp]|``function(resource) | string [string]
module: {noParse: [/moment-with-locales/],noParse: /jquery|lodash/,noParse: (content) => /jquery|lodash/.test(content)}
3. 将模块暴露到全局,expose-loader、ProvidePlugin
3.1 expose-loader
yarn add expose-loader --devmodule: {loaders: [{ test: require.resolve("jquery"), loader: "expose-loader?$" }]}// window.$ is then available in the browser consolerequire("expose-loader?$!jquery");
3.2 ProvidePlugin
plugins: [new webpack.ProvidePlugin({$: 'jquery',jQuery: 'jquery'});]// $ is automatically set to the exports of module "jquery"$('#item')
4. 提取公共代码。webpack.optimize.CommonsChunkPlugin
entry: {vendor: ['jquery', 'other-lib'],},plugins: [new webpack.optimize.CommonsChunkPlugin({name: 'commons',// (公共 chunk(commnon chunk) 的名称)filename: 'commons.js',// (公共chunk 的文件名)// minChunks: 3,// (模块必须被3个 入口chunk 共享)// chunks: ["pageA", "pageB"],// (只使用这些 入口chunk)}),// 明确第三方chunknew webpack.optimize.CommonsChunkPlugin({name: 'vendor',// filename: "vendor.js"filename: "[name].[hash:8].js"// (给 chunk 一个不同的名字)minChunks: 3,// (随着 entry chunk 越来越多,// 这个配置保证没其它的模块会打包进 vendor chunk)chunks: ['jquery', 'lodash']})]
5. 配置全局开关 webpack.DefinePlugin
plugins: [new webpack.DefinePlugin({// Definitions...DEBUG: true});]const Constant = {API_HOST: DEBUG ? "http://192.169.2.187" : ""}
6. 单独打包CSS
yarn add extract-text-webpack-plugin --devconst ExtractTextPlugin = require("extract-text-webpack-plugin");module.exports = {module: {rules: [{test: /\.css$/,use: ExtractTextPlugin.extract({fallback: "style-loader",use: "css-loader"})}]},plugins: [new ExtractTextPlugin("styles.css"),]}
参考文献:
Webpack性能优化
css单独打包
