webpack创建vue的运行环境
//初始化运行环境
npm init
//wepack4.X需安装webpack-cli
npm install webpack webpack-cli --save
新建webpack.config.js 文件
const path = require('path');
module.exports = {
//入口文件
entry:{
main:'./src/app.js'
},
//文件输出
output:{
path:path.resolve(__dirname,'dist'),
filename:'build.js'
}
}
package.json文件中添加
//添加dev
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "webpack --config webpack.config.js --mode development"
},
支持自动刷新
npm install webpack-dev-server --save
添加配置:
module.exports = {
.........
devServer{
port:'端口号'
historyApiFallback: true
}
}
package.json更改为:
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "webpack-dev-server --config webpack.config.js --mode development"
}
使用webpack-dev-server完成配置即可使用域名访问
配置vue(vue+vue-loader+vue-template-compiler)
//支持vue
npm install vue vue-loader vue-template-compiler --save
//webpack.config.js 添加vue配置
const path = require('path');
const VueLoaderPlugin = require('vue-loader/lib/plugin');
module.exports = {
......
module:{
rules:[
{
test:/\.vue$/,
loader:'vue-loader'
}
]
},
resolve:{
alias:{
'vue$':'vue/dist/vue.esm.js'
}
},
plugins:[
new VueLoaderPlugin()
]
.....
}
不添加resovel的内容会报以下错误
以上初步完成webpack支持vue的基础环境,还需支持es6,css,img的格式的支持还要添加相关loader
支持es6解析babel7
npm install @babel/core babel-loader @babel/preset-env @babel/plugin-transform-runtime @babel/cli @babel/plugin-proposal-class-properties @babel/plugin-proposal-decorators @babel/plugin-proposal-export-default-from
module:{
rules:[
........
{
test:/\.js$/,
loader:'babel-loader',
options:{
presets:['@babel/preset-env'],
plugins:['@babel/plugin-transform-runtime']
}
}
]
}
支持css解析
npm install style-loader css-loader --save
module:{
rules:[
........
{
test:/\.css$/,
loader:'style-loader!css-loader',
}
]
}
支持img 图片等解析
npm install file-loader url-loader
//webpack配置
module:{
rules:[
..........
{
test:/\.(png|jpg|jpeg|gif|svg)$/,
use:[
{
loader:'url-loader',
options:{
limit:10000, //限制图片大小为10000B,小于限制转为base64的格式
//超出限制,创建文件格式
// build/images/[图片名].[hash].[图片格式]
name:'images/[name].[hash].[ext]'
}
}
]
}
]
}
支持sass方式解析
npm install vue-style-loader --save //此属于vue的配置
npm install node-sass sass-loader --save
module:{
rules:[
............
{
test:/\.sass$/,
loader:'vue-style-loader!css-loader!sass-loader'
}
]
}
支持模板设置html-webpack-plugin
npm install html-webpack-plugin --save
const HtmlWebpackPlugin = require('html-webpack-plugin');
.......
module.exports = {
........
plugins:[
..........
new HtmlWebpackPlugin({
title:"XXXXXX",
template:"./index.html",
minify:{
.........
}
})
]
}
//html-webpack-plugin 可配置参数
1.title:生成的HTML模板的title,如果模板中有设置title的名字,则会忽略这里的设置
2.filename:生成的模板文件的名字
3.template:模板来源文件(html文件)
4.inject:引入模板的注入位置,取值有true/false/body/head
true:默认值,script标签位于html文件的body底部
body:script标签位于html文件的body底部
head:script标签位于html文件的head中
false:不插入生成的js文件,这个几乎不会用到的
5.favicon:指定页面图标,
6.minify:使用minify会对生成的html文件进行压缩,默认是false。html-webpack-plugin内部集成了html-minifier,因此,还可以对minify进行配置,常用的配置项是:
caseSensitive:false,//是否大小写敏感
collapseWhitespace:true//是否去除空格
removeAttributeQuotes:true// 去掉属性引用
removeComments:true,//去注释
支持css文件提取:由于webpack4以后对css模块支持的逐步完善和commonchunk插件的移除,在处理css文件提取的计算方式上也做了些调整,之前我们首选使用的[extract-text-webpack-plugin]也完成了其历史使命,将让位于[mini-css-extract-plugin]
npm install mini-css-extract-plugin --save
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
module:{
rules:[
{
test:/\.css$/,
use:[
MiniCssExtractPlugin.loader,
"css-loader"
]
},
.........
{
test:/\.sass/,
use:[
MiniCssExtractPlugin.loader,
"css-loader",
"sass-loader"
]
}
]
},
plugins:[
new MiniCssExtractPlugin({
filemame:'[name].css',
chunkFilename:"[id].css"
});
]
压缩css
npm install optimize-css-assets-webpack-plugin --save
plugins:[
.......
new OptimizeCssAssetsPlugin({
assetNameRegExp: /\.css$/g, //一个正则表达式,指示应优化/最小化的资产的名称。提供的正则表达式针对配置中ExtractTextPlugin实例导出的文件的文件名运行,而不是源CSS文件的文件名。默认为/\.css$/g
cssProcessor: require('cssnano'), //用于优化\最小化CSS的CSS处理器,默认为cssnano
cssProcessorOptions: { safe: true, discardComments: { removeAll: true } }, //传递给cssProcessor的选项,默认为{}
canPrint: true //一个布尔值,指示插件是否可以将消息打印到控制台,默认为true
}),
]
参考:
https://blog.csdn.net/github_37360787/article/details/82183557
https://blog.csdn.net/weixin_40184174/article/details/85125388
https://www.jianshu.com/p/07c8ff5ef37f
https://segmentfault.com/a/1190000014247030
https://blog.csdn.net/wopelo/article/details/78403661