webpack配置筆記

這段時間準備自己寫一個博客使用react,因此自然也接觸到了很流行的打包工具webpack。寫了一個簡單的react和webpack的配置模版,如果覺得不錯可以star一哈~
https://github.com/YingQQQ/webpack-react
一、WebPack的安裝
Webpack常規的安裝是通過npm。
Webpack的有些命令需要電腦安裝才能使用,所以需要通過npm命名進行Webpack的全局安裝:

$ npm install webpack -g

安裝之后執行

webpack -v

二、webpack基本命令

$ webpack --config XXX.js //使用另一份配置文件(比如webpack.dev.config.js)來打包

$ webpack --watch //監聽變動并自動打包

$ webpack -p//壓縮混淆腳本

$ webpack -d//生成map映射文件,告知哪些模塊的去向 
$ webpack --progress //顯示進度條
$ webpack --color //添加顏色

三、 webpack.config.js
一般來說都會有兩個配置文件一個用于Dev,一個用于Build.但是他們有一些配置是公用的。因此我們就用 process.env.npm_lifecycle_event這個參數來辨別開發環境。

const path = require('path');
const webpack = require('webpack');
const merge = require('webpack-merge');//webpack合并工具。
const validate = require('webpack-validator')//webpack錯誤配置提示工具。
const CleanWebpackPlugin = require('clean-webpack-plugin');//build時刪除原文件
const ExtractTextPlugin = require('extract-text-webpack-plugin');//提取樣式插件
const HtmlWebpackPlugin = require('html-webpack-plugin');//自動生成html插件

const TARGET = process.env.npm_lifecycle_event;

const PATHS = {
  app: path.resolve(__dirname, 'app'),
  style: [
    path.join(__dirname, 'app/style','Main.css'),
  ],
  build: path.join(__dirname, 'build'),
  test: path.join(__dirname, 'tests')
};;//文件入口配置

//Dev 和BUILD 共同配置
const common = merge(
  {
    entry: {
      app: PATHS.app
    },//入口文件配置
    output: {
      path: PATHS.build,
      filename: '[name].js'
    },//入口文件輸出配置
    resolve: {
      extensions: ['', '.js', '.jsx']
    }
  },
  module: {
    preLoaders: [
      {
        test: /\.(js|jsx)$/,
        loaders: ['eslint'],
        include: PATHS.app
      }
    ]//eslint檢測代碼錯誤
    loaders: [
      {
        test: /\.(js|jsx)$/,
        loaders: ['babel?cacheDirectory'],
        query: {
           'presets': ['es2015'],
            'plugins': [
               'transform-es3-property-literals',
               'transform-es3-member-expression-literals'
            ]
        }
      }//設置允許編譯ES6
    ]
  }
  plugins: [
    new HtmlWebpackPlugin({
      template: require('html-webpack-template'),
      title: 'My App',//設置title的名字
      inject: false,
      appMountId: 'app',//設置標簽的id
      //filename: 'index.html',設置這個html的文件名,默認是index.html
      // template:'header.html',要使用的模塊的路徑,例如jade,ejs
      // inject: 'body',把模板注入到哪個標簽后 'body'
      // favicon:'./images/favico.ico',給html添加一個favicon  './images/favico.ico'
      // minify:true,是否壓縮  true false
      // hash:true,是否hash化 true false ,
      // cache:false,是否緩存,
      // showErrors:false,是否顯示錯誤,
      // xhtml:false 是否自動關閉標簽 默認false
    })
  ]
);
var config;

switch(TARGET) {
  case 'build':
    config = merge(
      common,
      {
        devtool: 'source-map',
        entry: {
          style: PATHS.style
        },//提供css文件入口
        output: {
          path: PATHS.build,
          filename: '[name].[chunkhash].js',
          chunkFilename: '[chunkhash].js'
        }
      },
      module: {
        loaders: [
          //提取樣式
          {
            test: /\.css$/,
            loader: ExtractTextPlugin.extract('style', 'css'),
            include: PATHS.style
          }
        ]
      },
      plugins: [
        new CleanWebpackPlugin(PATHS.build, {
          root: process.cwd()
        }),
        new webpack.optimize.CommonsChunkPlugin({
            // 與 entry 中的 vendors 對應
            name: ['vendors', 'manifest'],
            // 輸出的公共資源名稱
            filename: 'common.bundle.js',
            // 對所有entry實行這個規則
            minChunks: Infinity
        }),
        // 把jquery作為全局變量插入到所有的代碼中
        // 然后就可以直接在頁面中使用jQuery了
        // new webpack.ProvidePlugin({
        //     $: 'jquery',
        //     jQuery: 'jquery',
        //     'window.jQuery': 'jquery'
        // }),例如想在js中用$,如果通過webpack加載,需要將$與jQuery對應起來,
        //我這里不使用如有需要自行添加。
        new webpack.DefinePlugin({
          process.env.NODE_ENV:'production'
        }),//設置build時的關鍵字,便于壓縮文件。
        new webpack.optimize.UglifyJsPlugin({
            compress: {
              warnings: false
          }
        }),//代碼丑化
        new ExtractTextPlugin('[name].[chunkhash].css')
      ]
    );
    break;
  default:
    config = merge(
      common,
      {
        devtool: 'eval-source-map',
        entry: {
          style: PATHS.style
        }
      },
      devServer: {
        historyApiFallback: true,//查看歷史url
        contentBase: "./",//設定根目錄。如果不進行設定的話,默認是在當前目錄下。
        quiet: false, //控制臺中不輸出打包的信息
        noInfo: false,
        hot: true, //開啟熱點
        inline: true, //開啟頁面自動刷新
        lazy: false, //不啟動懶加載
        progress: true, //顯示打包的進度
        watchOptions: {
            aggregateTimeout: 300
        },
        port: '8088' //設置端口號
      },//webpack-dev-server可以幫你啟動一個服務器在Dev的時候
      module: {
        loaders: [
          {
            test: /\.css$/,
            loaders: ['style', 'css'],
            include: PATHS.style
          }
        ]
      }
    );
}
module.exports = validate(config, {
  quiet: true
});

簡單的寫了一寫不要嫌棄~~

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,763評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,238評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,823評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,604評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,339評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,713評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,712評論 3 445
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,893評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,448評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,201評論 3 357
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,397評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,944評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,631評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,033評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,321評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,128評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,347評論 2 377

推薦閱讀更多精彩內容