webpack配置筆記

這段時(shí)間準(zhǔn)備自己寫(xiě)一個(gè)博客使用react生逸,因此自然也接觸到了很流行的打包工具webpack。寫(xiě)了一個(gè)簡(jiǎn)單的react和webpack的配置模版沃疮,如果覺(jué)得不錯(cuò)可以star一哈~
https://github.com/YingQQQ/webpack-react
一、WebPack的安裝
Webpack常規(guī)的安裝是通過(guò)npm。
Webpack的有些命令需要電腦安裝才能使用,所以需要通過(guò)npm命名進(jìn)行Webpack的全局安裝:

$ npm install webpack -g

安裝之后執(zhí)行

webpack -v

二、webpack基本命令

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

$ webpack --watch //監(jiān)聽(tīng)變動(dòng)并自動(dòng)打包

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

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

三蓄诽、 webpack.config.js
一般來(lái)說(shuō)都會(huì)有兩個(gè)配置文件一個(gè)用于Dev,一個(gè)用于Build.但是他們有一些配置是公用的媒吗。因此我們就用 process.env.npm_lifecycle_event這個(gè)參數(shù)來(lái)辨別開(kāi)發(fā)環(huán)境仑氛。

const path = require('path');
const webpack = require('webpack');
const merge = require('webpack-merge');//webpack合并工具。
const validate = require('webpack-validator')//webpack錯(cuò)誤配置提示工具。
const CleanWebpackPlugin = require('clean-webpack-plugin');//build時(shí)刪除原文件
const ExtractTextPlugin = require('extract-text-webpack-plugin');//提取樣式插件
const HtmlWebpackPlugin = require('html-webpack-plugin');//自動(dòng)生成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檢測(cè)代碼錯(cuò)誤
    loaders: [
      {
        test: /\.(js|jsx)$/,
        loaders: ['babel?cacheDirectory'],
        query: {
           'presets': ['es2015'],
            'plugins': [
               'transform-es3-property-literals',
               'transform-es3-member-expression-literals'
            ]
        }
      }//設(shè)置允許編譯ES6
    ]
  }
  plugins: [
    new HtmlWebpackPlugin({
      template: require('html-webpack-template'),
      title: 'My App',//設(shè)置title的名字
      inject: false,
      appMountId: 'app',//設(shè)置標(biāo)簽的id
      //filename: 'index.html',設(shè)置這個(gè)html的文件名,默認(rèn)是index.html
      // template:'header.html',要使用的模塊的路徑,例如jade,ejs
      // inject: 'body',把模板注入到哪個(gè)標(biāo)簽后 'body'
      // favicon:'./images/favico.ico',給html添加一個(gè)favicon  './images/favico.ico'
      // minify:true,是否壓縮  true false
      // hash:true,是否hash化 true false ,
      // cache:false,是否緩存,
      // showErrors:false,是否顯示錯(cuò)誤,
      // xhtml:false 是否自動(dòng)關(guān)閉標(biāo)簽 默認(rèn)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 對(duì)應(yīng)
            name: ['vendors', 'manifest'],
            // 輸出的公共資源名稱
            filename: 'common.bundle.js',
            // 對(duì)所有entry實(shí)行這個(gè)規(guī)則
            minChunks: Infinity
        }),
        // 把jquery作為全局變量插入到所有的代碼中
        // 然后就可以直接在頁(yè)面中使用jQuery了
        // new webpack.ProvidePlugin({
        //     $: 'jquery',
        //     jQuery: 'jquery',
        //     'window.jQuery': 'jquery'
        // }),例如想在js中用$锯岖,如果通過(guò)webpack加載介袜,需要將$與jQuery對(duì)應(yīng)起來(lái),
        //我這里不使用如有需要自行添加。
        new webpack.DefinePlugin({
          process.env.NODE_ENV:'production'
        })出吹,//設(shè)置build時(shí)的關(guān)鍵字遇伞,便于壓縮文件。
        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: "./",//設(shè)定根目錄鸠珠。如果不進(jìn)行設(shè)定的話,默認(rèn)是在當(dāng)前目錄下秋麸。
        quiet: false, //控制臺(tái)中不輸出打包的信息
        noInfo: false,
        hot: true, //開(kāi)啟熱點(diǎn)
        inline: true, //開(kāi)啟頁(yè)面自動(dòng)刷新
        lazy: false, //不啟動(dòng)懶加載
        progress: true, //顯示打包的進(jìn)度
        watchOptions: {
            aggregateTimeout: 300
        },
        port: '8088' //設(shè)置端口號(hào)
      },//webpack-dev-server可以幫你啟動(dòng)一個(gè)服務(wù)器在Dev的時(shí)候
      module: {
        loaders: [
          {
            test: /\.css$/,
            loaders: ['style', 'css'],
            include: PATHS.style
          }
        ]
      }
    );
}
module.exports = validate(config, {
  quiet: true
});

簡(jiǎn)單的寫(xiě)了一寫(xiě)不要嫌棄~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末渐排,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子灸蟆,更是在濱河造成了極大的恐慌驯耻,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炒考,死亡現(xiàn)場(chǎng)離奇詭異可缚,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)票腰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門(mén)城看,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)女气,“玉大人杏慰,你說(shuō)我怎么就攤上這事×毒希” “怎么了缘滥?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)谒主。 經(jīng)常有香客問(wèn)我朝扼,道長(zhǎng),這世上最難降的妖魔是什么霎肯? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任擎颖,我火速辦了婚禮,結(jié)果婚禮上观游,老公的妹妹穿的比我還像新娘搂捧。我一直安慰自己,他們只是感情好懂缕,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布允跑。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪聋丝。 梳的紋絲不亂的頭發(fā)上索烹,一...
    開(kāi)封第一講書(shū)人閱讀 49,730評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音弱睦,去河邊找鬼百姓。 笑死,一個(gè)胖子當(dāng)著我的面吹牛况木,可吹牛的內(nèi)容都是我干的瓣戚。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼焦读,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼子库!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起矗晃,我...
    開(kāi)封第一講書(shū)人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤仑嗅,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后张症,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體仓技,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年俗他,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了脖捻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡兆衅,死狀恐怖地沮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情羡亩,我是刑警寧澤摩疑,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站畏铆,受9級(jí)特大地震影響雷袋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜辞居,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一楷怒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瓦灶,春花似錦鸠删、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春捅僵,著一層夾襖步出監(jiān)牢的瞬間家卖,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工庙楚, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留上荡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓馒闷,卻偏偏與公主長(zhǎng)得像酪捡,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子纳账,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容