分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

webpack使用七

发布时间:2023-09-06 01:20责任编辑:彭小芳关键词:webpack

产品阶段的构建

目前为止,我们已经使用webpack构建了一个完整的开发环境。但是在产品阶段,可能还需要对打包的文件进行额外的处理,比如说优化,压缩,缓存以及分离CSS和JS。

对于复杂的项目来说,需要复杂的配置,这时候分解配置文件为多个小的文件可以使得事情井井有条,以上面的例子来说,我们创建一个webpack.production.config.js的文件,在里面加上基本的配置,它和原始的webpack.config.js很像,如下

// webpack.production.config.jsconst webpack = require(‘webpack‘);const HtmlWebpackPlugin = require(‘html-webpack-plugin‘);module.exports = { ???entry: __dirname + "/app/main.js", //已多次提及的唯一入口文件 ???output: { ???????path: __dirname + "/build", ???????filename: "bundle.js" ???}, ???devtool: ‘eval-source-map‘, ???devServer: { ???????contentBase: "./public", //本地服务器所加载的页面所在的目录 ???????historyApiFallback: true, //不跳转 ???????inline: true, ???????hot: true ???}, ???module: { ???????rules: [{ ???????????test: /(\.jsx|\.js)$/, ???????????use: { ???????????????loader: "babel-loader" ???????????}, ???????????exclude: /node_modules/ ???????}, { ???????????test: /\.css$/, ???????????use: ExtractTextPlugin.extract({ ???????????????fallback: "style-loader", ???????????????use: [{ ???????????????????loader: "css-loader", ???????????????????options: { ???????????????????????modules: true ???????????????????} ???????????????}, { ???????????????????loader: "postcss-loader" ???????????????}], ???????????}) ???????}] ???}, ???plugins: [ ???????new webpack.BannerPlugin(‘版权所有,翻版必究‘), ???????new HtmlWebpackPlugin({ ???????????template: __dirname + "/app/index.tmpl.html" //new 一个这个插件的实例,并传入相关的参数 ???????}), ???????new webpack.HotModuleReplacementPlugin() //热加载插件 ???],};
//package.json{ ?"name": "test", ?"version": "1.0.0", ?"description": "", ?"main": "index.js", ?"scripts": { ???"test": "echo \"Error: no test specified\" && exit 1", ???"start": "webpack", ???"server": "webpack-dev-server --open", ???"build": "NODE_ENV=production webpack --config ./webpack.production.config.js --progress" ?}, ?"author": "", ?"license": "ISC", ?"devDependencies": {... ?}, ?"dependencies": { ???"react": "^15.6.1", ???"react-dom": "^15.6.1" ?}}注意:window下的build后应该这样写:"set NODE_ENV=production webpack --config ./webpack.production.config.js --progress"

优化插件

webpack提供了一些在发布阶段非常有用的优化插件,它们大多来自于webpack社区,可以通过npm安装,通过以下插件可以完成产品发布阶段所需的功能

  • OccurenceOrderPlugin :为组件分配ID,通过这个插件webpack可以分析和优先考虑使用最多的模块,并为它们分配最小的ID
  • UglifyJsPlugin:压缩JS代码;
  • ExtractTextPlugin:分离CSS和JS文件

我们继续用例子来看看如何添加它们,OccurenceOrder 和 UglifyJS plugins 都是内置插件,你需要做的只是安装其它非内置插件

npm install --save-dev extract-text-webpack-plugin

在配置文件的plugins后引用它们

// webpack.production.config.jsconst webpack = require(‘webpack‘);const HtmlWebpackPlugin = require(‘html-webpack-plugin‘);const ExtractTextPlugin = require(‘extract-text-webpack-plugin‘);module.exports = { ???entry: __dirname + "/app/main.js",//已多次提及的唯一入口文件 ???output: { ???????path: __dirname + "/build", ???????filename: "bundle.js" ???}, ???devtool: ‘none‘, ???devServer: { ???????contentBase: "./public",//本地服务器所加载的页面所在的目录 ???????historyApiFallback: true,//不跳转 ???????inline: true, ???????hot: true ???}, ???module: { ???????rules: [ ???????????{ ???????????????test: /(\.jsx|\.js)$/, ???????????????use: { ???????????????????loader: "babel-loader" ???????????????}, ???????????????exclude: /node_modules/ ???????????}, ???????????{ ???????????????test: /\.css$/, ???????????????use: [ ???????????????????{ ???????????????????????loader: "style-loader" ???????????????????}, { ???????????????????????loader: "css-loader", ???????????????????????options: { ???????????????????????????modules: true ???????????????????????} ???????????????????}, { ???????????????????????loader: "postcss-loader" ???????????????????} ???????????????] ???????????} ???????] ???}, ???plugins: [ ???????new webpack.BannerPlugin(‘版权所有,翻版必究‘), ???????new HtmlWebpackPlugin({ ???????????template: __dirname + "/app/index.tmpl.html" ???????}), ???????new webpack.optimize.OccurrenceOrderPlugin(), ???????new webpack.optimize.UglifyJsPlugin(), ???????new ExtractTextPlugin("style.css") ???],};

此时执行npm run build可以看见代码是被压缩后的

缓存

缓存无处不在,使用缓存的最好方法是保证你的文件名和文件内容是匹配的(内容改变,名称相应改变)

webpack可以把一个哈希值添加到打包的文件名中,使用方法如下,添加特殊的字符串混合体([name], [id] and [hash])到输出文件名前

const webpack = require(‘webpack‘);const HtmlWebpackPlugin = require(‘html-webpack-plugin‘);const ExtractTextPlugin = require(‘extract-text-webpack-plugin‘);module.exports = {.. ???output: { ???????path: __dirname + "/build", ???????filename: "bundle-[hash].js" ???}, ??...};

现在用户会有合理的缓存了。

webpack使用七

原文地址:http://www.cnblogs.com/ldlx-mars/p/7748656.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved