1. 程式人生 > >webpack 小記

webpack 小記

ati mes 插件 color javascrip 名稱 set fix 版本

零、入口與輸出


//對像語法

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 小記