webpack3構(gòu)建react工程

第一個構(gòu)建的工程中使用的webpack還是1.x版本的
昨天新建個工程打算學(xué)習(xí)下g2的數(shù)據(jù)可視化開發(fā):

npm install --save-dev webpack

安裝的webpack都已經(jīng)是最新的3.3.0版本,不得不說學(xué)習(xí)的速度永遠(yuǎn)趕不上技術(shù)更新的速度啊檀咙。
既然webpack已經(jīng)下了最新版浪规,那我就把react缴渊、babel等都安裝了最新版等包组橄,動手前確保你的node率拒,npm版本是否支持最新的這些包贸弥,我的node 6.10.0瓢省, npm 3.10.10夠跑了弄息,給個參考,構(gòu)建過程中還是踩過不少坑的勤婚。
先看下工程目錄結(jié)構(gòu):

|-build  //生產(chǎn)環(huán)境的打包文件
|-dev  //開發(fā)環(huán)境的打包文件
|-node-modules
|-src
  |-app.js  //打包的主js
  |-router.js  //工程路由配置
|-.babelrc 
|-.gitignore
|-package.json
|-README.md
|-webpack.config.js  //webapck開發(fā)環(huán)境配置
|-webpack.pro.config.js  //webapck生產(chǎn)環(huán)境配置

接下來講解搭建步驟:

  1. 首先看下package.json:
{
  "name": "g2-demo",
  "version": "0.0.1",
  "description": "",
  "dependencies": {
    "babel-runtime": "^6.23.0",
    "react": "^15.6.1",
    "react-dom": "^15.6.1",
    "react-router": "^4.1.2"
  },
  "devDependencies": {
    "babel": "^6.23.0",
    "babel-cli": "^6.24.1",
    "babel-core": "^6.25.0",
    "babel-loader": "^7.1.1",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-es2016": "^6.24.1",
    "babel-preset-react": "^6.24.1",
    "css-loader": "^0.28.4",
    "file-loader": "^0.11.2",
    "html-webpack-plugin": "^2.29.0",
    "less": "^2.7.2",
    "less-loader": "^4.0.5",
    "react-hot-loader": "^1.3.1",
    "style-loader": "^0.18.2",
    "url-loader": "^0.5.9",
    "webpack": "^3.3.0",
    "webpack-dev-server": "^1.16.5"
  },
  "scripts": {
    "start": "webpack-dev-server --devtool eval --progress --colors --hot --inline --content-base dev",
    "build": "webpack --progress --profile --colors --config webpack.pro.config.js"
  },
  "author": "mia yu",
  "license": "ISC"
}
  1. 配置開發(fā)環(huán)境webpack.config.js:
var webpack = require('webpack');
var path = require('path');
module.exports = {
    plugins: [
      new webpack.optimize.ModuleConcatenationPlugin(),
      new webpack.LoaderOptionsPlugin({
        minimize: true
      })
    ],
    entry : {
        main : path.resolve(__dirname,'./src/app.js'),
   },
    output:{
        path: path.resolve(__dirname,'./dev'),
        filename: 'bundle.js'
    },
    module: {
        rules: [
            {test: /\.less/, use: ['style','css','less']},
            { test: /\.css$/, use: ['style','css'] },
            { test: /\.(png|jpg|jpeg)$/, use: ['url']},
            {test: /\.js$/,
              exclude: /(node_modules|bower_components)/,
              use: {
                loader: 'babel-loader',
                options: {
                  presets: ['es2015', 'react'],
                }
              }
            }
        ]
    },
    resolve: {
        extensions: [ '.js', '.json', '.scss','.less','jsonp'],
    },
    devServer:{
        inline:true,
        port:3000,
        // host:'192.168.199.237'
    }
};

因為webpack更新后API的變化摹量,所以有些配置的語法也要變化:比如loaders更名為rules,多個loader可以用use字段以數(shù)組的形式表示, entry需要申明為對象類型, resolve.extensions里的配置避免''(空串)馒胆,會報錯~等等缨称。

  1. babel的配置值得注意一下,在.babelrc文件中祝迂,需要將配置改為:
{
  "presets": [
    "react",
    [ "es2015", { "modules": false } ]
  ]
}

4.生產(chǎn)環(huán)境配置webpack.pro.config.js

var webpack = require('webpack');
var path = require('path');
var HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
    plugins: [
        new webpack.optimize.ModuleConcatenationPlugin(),
        new webpack.optimize.UglifyJsPlugin({minimize:true}),
        // new webpack.optimize.CommonsChunkPlugin('common'),
        new HtmlWebpackPlugin({
            title:"g2-demo",
            filename:'index.html',
            template:'./src/index.html' ,     //Load a custom template 
            // chunks:['common.js']
        }),
        new webpack.DefinePlugin({
            "process.env":{
                NODE_ENV:JSON.stringify('production')
            }
        })
    ],
    entry:{
        app:path.resolve(__dirname,'./src/app.js'),
        // common:['react', 'g2']
    },
    output:{
        path: path.resolve(__dirname,'./build'),
        filename: 'bundle.js'
        //filename: '[name].js'
    },
    module: {
        rules: [
            {test: /\.less/, use: ['style','css','less']},
            { test: /\.css$/, use: ['style','css'] },
            { test: /\.(png|jpg|jpeg)$/, use: ['url']},
            {test: /\.js$/,
              exclude: /(node_modules|bower_components)/,
              use: {
                loader: 'babel-loader',
                options: {
                  presets: ['es2015', 'react'],
                }
              }
            }
        ]
    },
    resolve: {
        extensions: ['.js', '.json', '.scss','.less','jsonp']
    }
};

我配置的是把所有的js都打包成一個文件:bundle.js睦尽,如果需要把三方包的js抽出來,可以在entry里配置common型雳,在plugin里聲明一個:

new webpack.optimize.CommonsChunkPlugin('common'),
注意一下:新版本的webpack中当凡,CommonsChunkPlugin插件里提示僅支持一位參數(shù)

然后將output里filename寫成[name].js即可

這樣基于webpack3.3.0的react工程就搭建好了
[源碼鏈接]:https://github.com/yomonah/g2-demo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末山害,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子沿量,更是在濱河造成了極大的恐慌浪慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件朴则,死亡現(xiàn)場離奇詭異权纤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)乌妒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進(jìn)店門汹想,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人撤蚊,你說我怎么就攤上這事欧宜。” “怎么了拴魄?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長席镀。 經(jīng)常有香客問我匹中,道長,這世上最難降的妖魔是什么豪诲? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任顶捷,我火速辦了婚禮,結(jié)果婚禮上屎篱,老公的妹妹穿的比我還像新娘服赎。我一直安慰自己,他們只是感情好交播,可當(dāng)我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布重虑。 她就那樣靜靜地躺著,像睡著了一般秦士。 火紅的嫁衣襯著肌膚如雪缺厉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天隧土,我揣著相機(jī)與錄音提针,去河邊找鬼。 笑死曹傀,一個胖子當(dāng)著我的面吹牛辐脖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播皆愉,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼嗜价,長吁一口氣:“原來是場噩夢啊……” “哼艇抠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起炭剪,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤练链,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后奴拦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體媒鼓,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年错妖,在試婚紗的時候發(fā)現(xiàn)自己被綠了绿鸣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡暂氯,死狀恐怖潮模,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情痴施,我是刑警寧澤擎厢,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站辣吃,受9級特大地震影響动遭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜神得,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一厘惦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧哩簿,春花似錦宵蕉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至宗苍,卻和暖如春缝左,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背浓若。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工渺杉, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人挪钓。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓是越,卻偏偏與公主長得像,于是被迫代替她去往敵國和親碌上。 傳聞我的和親對象是個殘疾皇子倚评,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,629評論 2 354

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

  • 版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載呢岗。 webpack介紹和使用 一冕香、webpack介紹 1、由來 ...
    it筱竹閱讀 11,116評論 0 21
  • GitChat技術(shù)雜談 前言 本文較長后豫,為了節(jié)省你的閱讀時間悉尾,在文前列寫作思路如下: 什么是 webpack,它要...
    蕭玄辭閱讀 12,691評論 7 110
  • 無意中看到zhangwnag大佬分享的webpack教程感覺受益匪淺挫酿,特此分享以備自己日后查看构眯,也希望更多的人看到...
    小小字符閱讀 8,160評論 7 35
  • 構(gòu)建一個小項目——FlyBird,學(xué)習(xí)webpack和react早龟。(本文成文于2017/2/25) 從webpac...
    布蕾布蕾閱讀 16,818評論 31 98
  • 這個端午節(jié)很累惫霸,按理來說,今天應(yīng)該是起床比較苦惱的葱弟。但是它褪,六點不到就醒了!在這個清凈的早晨翘悉,為自己的人生大事苦惱,...
    一蠻牛閱讀 303評論 0 0