const path = require('path');// 引入node的path包
const HTMLPlugin = require('html-webpack-plugin');//引入html包
const webpack = require('webpack');
const ExtractPlugin = require('extract-text-webpack-plugin');//将css打包成一个css文件
const isDev = process.env.NODE_ENV === 'development';//判断是否是开发环境
const config = {
target:'web',//编译目标,运行在web端
entry:path.join(__dirname,'src/index.js'),//入口文件名(项目主文件)
output:{//输出出口
filename:'build.[hash:8].js', //输出的文件名
path:path.join(__dirname,'dist') //输出路径
},
module:{//配置一个加载资源包
rules:[//规则
{
test:/\.vue$/,//验证文件结尾文件类型
loader:'vue-loader'//加载的模块
},
{
test:/\.jsx$/,
loader:'babel-loader'
},
{
test:/\.(gif|jpg|jpeg|png|svg)$/,
use:[
{
loader:'url-loader',
options:{//配置loader参数
limit:1024,//文件小于1024字节时,转换成base64编码,写入文件里面
name:'[name].[ext]'
}
}
]
}
]
},
//webpack插件配置
plugins:[
//webpack编译的过程中和在页面自己写的js判断环境调用process.env
new webpack.DefinePlugin({
'process.env':{
NODE_ENV:isDev ? '"development"':'"production"'
}
}),
new HTMLPlugin()
]
};
if (isDev){//开发环境配置
config.module.rules.push({
test:/\.styl/,
use:[
'style-loader',
'css-loader',
{
loader:'postcss-loader',
options:{
sourceMap:true,//stylus和postcss同时会生成sourceMap,等于true时提高效率
}
},
'stylus-loader'
]
})
config.devtool = '#cheap-module-eval-source-map';//页面代码调试
config.devServer = {
port:8080,
host:'0.0.0.0',//通过localhost:127.0.0.1或者本机内网IP访问(别人电脑/手机可访问)
overlay:{//webpack编译出错时,则显示到网页上
errors:true
},
open:true,//启动webpack-devserver时自动打开浏览器
hot:true //不刷新热加载数据 需引入插件
/* historyApiFallback:{
//路由地址映射到index.html上
}*/
};
config.plugins.push(//热加载插件
new webpack.HotModuleReplacementPlugin(),
new webpack.NoEmitOnErrorsPlugin()
)
}else{
//生成配置环境
config.entry = {//将所用的类库单独打包
app:path.join(__dirname,'src/index.js'),
vendor:['vue']
}
config.output.filename = '[name].[chunkhash:8].js';
config.module.rules.push({
test:/\.styl/,
use:ExtractPlugin.extract({
fallback:'style-loader',
use:[
'css-loader',
{
loader:'postcss-loader',
options:{
sourceMap:true
}
},
'stylus-loader'
]
})
})
config.plugins.push(//正式环境css生成的css文件名字
//new ExtractPlugin('styles.[contentHash:8].css'),
//[contentHash]路径变量不可用,可以直接把它去掉或者换成[name]、[id]都可以打包成功
new ExtractPlugin('styles.[name].css')
/*//!* webpack 4.0之后就不用了
//将类库文件单独打包q'q
new webpack.optimize.CommonsChunkPlugin({
name:'vendor'
}),
// webpack相关的代码单独打包
new webpack.optimize.CommonsChunkPlugin({
name: 'runtime'
})*/
);
/*config.optimization = {
splitChunks:{//设置缓存的 chunks
cacheGroup:{
commons:{
chunks:'initial', //必须三选一 initial all async(默认就是异步)
minChunks:2, //最小chunk,默认1
maxInitialRequests:5, //最大初始化请求书,默认1
minSize:0 //最小尺寸,默认0
},
vendor:{
test:/node_modules/, //正则规则验证,如果符合就提取chunk
chunks:'initial', //必须三选一 initial all async(默认就是异步)
name:'vendor', //要缓存的,分割出来的chunk名称
priority:10, //缓存组优先级
enforce:true
}
}
},
runtimeChunk:true
}*/
}
module.exports = config;
webpack4.6.0打包配置vue项目带注释
猜你喜欢
转载自blog.csdn.net/qq_37144354/article/details/80115045
今日推荐
周排行