webpack 小记
Posted 大泽队长
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webpack 小记相关的知识,希望对你有一定的参考价值。
零、入口与输出
//对像语法
entry: {
aa: __dirname + ‘/src/aa.js‘, //(chunkName :path)
bb: __dirname + ‘/src/bb.js‘
},
output: {
filename: ‘[name]-[hash].js‘,
path: __dirname + ‘/dist‘
}
//单入口
entry: ‘./src/aa.js‘,
output: {
filename: ‘bundle.js‘,
path: __dirname + ‘/dist‘ //绝对路径(__dirname为文件所在目录的绝对路径)
}
//数组
entry: [ ‘./src/aa.js‘ , ‘./src/bb.js‘],
output: {
filename: [变量] + ‘.js‘,
path: __dirname + ‘/dist‘
}
一、提取公共代码
plugins:[ new webpack.optimize.CommonsChunkPlugin({
name: ‘common‘,
filename: ‘aa.js‘, //忽略则以name为输出文件的名字,否则以此为输出文件名字
chunks: [‘aa‘, ‘bb‘],
minChunks: true
})
]
name 或者 names:创建的chunk的名称,如果是 names 数组,则相当于为数组里的每个chunk 实例化插件;
filename:输出的 chunk的文件名;
chunks:这是一个元素为 chunk.name的数组,插件将会从这些 chunks 里提取 common chunks(若忽略,所有chunk都被选择);
minSize:非必填,common chunk 的文件大小至少有 minSize 才会被创建;
minChunks:至少有minChunks个 chunk 共有的代码 才会被提取(Infinity:chunk里引用的模块不会被提取;true:chunk里的所有公共部分都会提取);
(若想将css从common chunk中 提取出单独的css文件:
loaders:[{
test: /\.css$/,
use: ExtractTextPlugin.extract({
fallback: ‘style-loader‘,
use: ‘css-loader‘
})
},...]
plugins:[
new ExtractTextPlugin({ filename: ‘[name].css‘, allChunks: true }),
]
)
二、加载器
module: {
loaders: [ {
test: /\.js$/, loader: ‘babel-loader‘, //必须加‘-loader’
exclude: /node_modules/,
query: { presets: [‘es2015‘] }
},{
test: /\.css$/,
loader: ‘style-loader!css-loader‘
},{
test: /\.scss$/,
loader: ‘style-loader!css-loader!sass-loader?sourceMap=true!postcss-loader‘ //我们需要在js文件里,通过require的方式来引入css,需要安装css-loader,
style-loader(安装style-loader的目的是为了在html中以style的方式嵌入css)。
} ]
}
三、HTML自动引用 JS/CSS
安装 npm install --save-dev html-webpack-plugin
plugins: [ new HtmlWebpackPlugin({
filename: ‘views/list.html‘,
template: ‘src/modules/app/list/index.html‘,
chunks: [‘common‘, ‘List‘],
hash: true}), ]
/**
*filename - 输出文件名,相对路径output.path
* template - HTML模板,相对配置文件目录
* chunks - 只包含指定的文件(打包后输出的JS/CSS),不指定的话,它会包含生成的所有js和css文件
* excludeChunks - 排除指定的文件(打包后输出的JS/CSS),比如:excludeChunks: [‘dev-helper‘]
* hash
**/
四、自动添加兼容前缀(使用postcss的autoprefixer插件)
plugins: [ new webpack.LoaderOptionsPlugin({ options: { postcss: function(){ return [ require("autoprefixer")({ browsers: [‘ie>=8‘,‘>1% in CN‘] , //([‘android >= 2.3‘,‘ios>=7‘])
cascade: true, //美化属性值(冒号对齐) }) ] } } })
也可以配置 postcss.config.js 而不写在plugins里:
module.exports = { plugins: [ require(‘autoprefixer‘)({ /* ...options */ }) ] }
或直接使用autoprefixer-loader:
loaders: [{ test: /\.css$/, loader: ‘style-loader!css-loader!autoprefixer-loader?{browsers:["last 2 version", "android>=2.3"]}‘, //... }]
五、自动刷新
安装 npm install --save-dev webpack-dev-server
配置
devServer: { contentBase: "./public", //本地服务器所加载的页面所在的目录 //colors: true, //终端中输出结果为彩色(新版本已取消该属性) historyApiFallback: true, //不跳转 inline: true, //实时刷新 port : ‘8008‘ //默认8080 }
命令:
webpack-dev-server --inline
六、Source Map
devtool: ‘eval-source-map‘ //开发环境 devtool: ‘source-map‘ //生产环境 //具体原理待研究
以上是关于webpack 小记的主要内容,如果未能解决你的问题,请参考以下文章
webpack-dev-server 小记 原理介绍 概念解读
Vue报错:Uncaught TypeError: Cannot assign to read only property 'exports' of object 的解决方法(代码片段