1、拆分配置和merge
webpack.common.js
webpack.dev.js 引入common
webpack.prod.js 引入common
使用webpack-merge 引入{smart}引入common
2、启动本地服务 dev环境下 安装webpack-dev-server
可以监听文件变化,解决开发阶段跨域问题
devServer:{
contentBase:’./bundle’ 打包后目录
open:true //是否自动在浏览器打开
port:9090 //服务器端口号
}
package.json启动方式:npx webpack-dev-server —config webpack.xxx.js
解决跨域:
devServer: {contentBase: "./dist",open: true,port: 9090,proxy: {// 所有API开头的请求都会被代理到target// 例如: 我们发送请求地址: http://127.0.0.1:9090/api// 实际发送请求地址: http://127.0.0.1:3000/api"/api": {target: "http://127.0.0.1:3000", // 代理地址changeOrigin: true, // 域名跨域secure: false, // https跨域}}}
3、es6转化 babel-loader
在企业开发中为了兼容一些低级版本的浏览器, 我们需要将ES678高级语法转换为ES5低级语法
npm install —save-dev babel-loader @babel/core @babel/preset-env
{
test: /\.js$/,
exclude: /node_modules/, // 不做处理的目录
loader: "babel-loader",
options: {
presets: ["@babel/preset-env"],
},
}
我们通过配置presets的方式来告诉webpack我们需要兼容哪些浏览器
presets: [["@babel/preset-env",{
targets: {
"chrome": "58",
"ie": "10"
},
}]],
4、处理样式 css-loader style-loader
2.1安装cssloader
npm install —save-dev css-loader
2.2安装styleloader
npm install style-loader —save-dev
{
test: /\.css$/,
/*
css-loader: 解析css文件中的@import依赖关系
style-loader: 将webpack处理之后的内容插入到HTML的HEAD代码中
* */
use: [ 'style-loader', 'css-loader' ]
}
4.1单一原则, 一个loader只做一件事情
4.2多个loader会按照从右至左, 从下至上的顺序执行
POSTCSS-LOADER适配浏览器兼容css
使用:需要配置postcss.config.js,安装autoprefixer 添加前缀 比如transform
module.exports = {
plugins: {
"autoprefixer": {
"overrideBrowserslist": [
// "ie >= 8", // 兼容IE7以上浏览器
// "Firefox >= 3.5", // 兼容火狐版本号大于3.5浏览器
// "chrome >= 35", // 兼容谷歌版本号大于35浏览器,
// "opera >= 11.5" // 兼容欧朋版本号大于11.5浏览器,
"chrome >= 36", // 如果需要适配的浏览器完全兼容则不会添加前缀
]
}
}
};
5、处理图片:
dev中可以使用file-loader
prod中可以使用url-loader:可做配置限制大小 使用base64,输出到img目录下,可以减少http请求
use:{
loader:'url-loader',
options:{
limit:5*1024,
outputPath:'/img'
}
}
6、输出的js文件,可命名为bundle.[contentHash:8].js,内容改变 hash会改变,浏览器刷新时会命中缓存
7、模块化
