時間:2016.3.19-12:29
做者:三月懶驢
基於:react版本:0.14
基於:babel版本:6
相關代碼:githubjavascript
npm init
npm install webpack --save-dev
- /app - main.js - component.js - /build - bundle.js (自動生成) - index.html - webpack.config.js - package.json
var path = require('path'); module.exports = { entry:path.resolve(__dirname,'app/main.js'), output:{ path:path.resolve(__dirname,'build'), filename:'bundle.js' } };
在package.json裏面預設這個命令去啓動打包功能html
"build":"webpack"
//component.js 'use strict' module.exports = function(){ var a = 'hello word' return a; }
//main.js 'use strict' var component = require('./component.js'); document.body.innnerHTML = component();
npm install webpack-dev-server --save-dev
在package.json裏面配置webpack-dev-serverjava
"dev":"webpack-dev-server --devtool eval --progress --colors --hot --content-base build" //webpack-dev-server 建立一個服務器8080端口的 //devtool eval --爲你的代碼建立源地址,能夠代碼快速定位 //progress --顯示進度條 //colors --命令行帶顏色 //content-base build --指向設置的輸出目錄 //一旦啓動這個就會用服務器去監聽代碼文件的變化,從而每次變化都自動合併
啓動自動刷新功能node
//配置在webpack.config.js的入口 entry:[ 'webpack/hot/dev-server', 'webpack-dev-server/client?http://localhost:8080', path.resolve(__dirname,'app/main.js'); ]
1. npm run dev 啓動服務器 2. 打開瀏覽器->http://localhost:8080 3. 修改一下前面的課堂練習時候寫的代碼中的compnent.js的return的東西
//安裝react npm install react --save npm install react-dom --save //安裝babel-loader npm install babel-loader --save-dev npm install babel-core --save-dev npm install babel-preset-es2015 --save-dev //支持ES2015 npm install babel-preset-react --save-dev //支持jsx npm install babel-preset-stage-0 --save-dev //支持ES7 //可是還不夠 npm install babel-polyfill --save /* Polyfilla是一個英國產品,在美國稱之爲Spackling Paste(譯者注:刮牆的,在中國稱爲膩子).記住這一點就行:把舊的瀏覽器想象成爲一面有了裂縫的牆.這些[polyfills]會幫助咱們把這面牆的裂縫抹平,還咱們一個更好的光滑的牆壁(瀏覽器) */ npm install babel-runtime --save npm install babel-plugin-transform-runtime --save-dev /*減小打包的時候重複代碼,以上要注意是放在dev仍是非dev上!*/
配置babelreact
//在入口添加polyfill entry[ 'babel-polyfill', 'webpack/hot/dev-server', 'webpack-dev-server/client?http://localhost:8080', path.resolve(__dirname,'app/main.js') ] //在webpack.config.js的module.exports = {}裏面增長 module:{ loaders:[{ 'loader':'babel-loader', exclude:[ //在node_modules的文件不被babel理會 path.resolve(__dirname,'node_modules'), ], include:[ //指定app這個文件裏面的採用babel path.resolve(__dirname,'app'), ], test:/\.jsx?$/, query:{ plugins:['transform-runtime'], presets:['es2015','stage-0','react'] } }] }
//component.js 'use strict' import React from 'react' class Component extends React.Component{ render(){ return <div>Helllo World</div> } }
//main.js 'use strict' //注意!這裏引入了新的東西 import 'babel-polyfill' import React from 'react' import {render} from 'react-dom' import Component from './component' let main = function(){ render(<Component />,document.getElementById('main')); } main();
// 這裏先留個坑!由於暫時來講仍是認爲外鏈出來適合如今這個時代。可能在項目正式上線的時候才須要
//新建一個webpack.production.config.js //in package.json "deploy": "NODE_ENV=production webpack -p --config webpack.production.config.js" //in webpack.production.config.js //和開發環境不一樣的是,入口和出口。相應的在HTML的JS源也要進行修改。 var path = require('path') var node_module_dir = path.resolve(__dirname,'node_module'); module.exports = { entry:[ 'babel-polyfill', path.resolve(__dirname,'app/main.js'), ], output:{ path:path.resolve(__dirname,'build'), filename:'app.js' }, module:{ loaders:[ { loader:"babel-loader", //加載babel模塊 include:[ path.resolve(__dirname,'app'), ], exclude:[ node_module_dir ], test:/\.jsx?$/, query:{ plugins:['transform-runtime'], presets:['es2015','stage-0','react'] } }, ] } }
庫最好就不要打包進來。由於通常庫都是不會改動的。全部用戶load一次就行了。因此這裏就要進行庫的分離。
依舊是:webpack.production.config.jswebpack
var path = require('path'); var webpack = require('webpack'); var node_module_dir = path.resolve(__dirname,'node_module'); module.exports = { entry:{ app:[path.resolve(__dirname,'app/main.js'),], react: ['babel-polyfill','react','react-dom'] }, output:{ path:path.resolve(__dirname,'build'), filename:'app.js' }, module:{ loaders:[ { loader:"babel-loader", //加載babel模塊 include:[ path.resolve(__dirname,'app'), ], exclude:[ node_module_dir ], test:/\.jsx?$/, query:{ plugins:['transform-runtime'], presets:['es2015','stage-0','react'] } }, ] }, plugins: [ new webpack.optimize.CommonsChunkPlugin('react', 'react.js') ] }
預計學習搭建時間:1小時!
恭喜你!所有課程完成,接下來的話,咱們就要開始react的課程了!本課程若是還有什麼不懂的話,能夠在評論中進行討論。git