(參考別人結合本身的整理得出,如有錯誤請大神指出)css
Facebook 官方推出Create-React-App腳手架,基本能夠零配置搭建基於webpack的React開發環境,內置了熱更新等功能。html
詳細文檔可前往連接:Create-React-App文檔node
本文將介紹使用Create-React-App腳手架搭建antd-mobile的開發環境。react
npm install -g create-react-app /* 安裝create-react-app,建議使用cnpm */ create-react-app myapp /* 使用命令建立應用,myapp爲項目名稱 */ cd myapp /* 進入目錄,而後啓動 */ npm start /*啓動運行*/
按以上執行,便可快速建立一個React開發環境。webpack
會自動打開默認瀏覽器 http://localhost:3000/ git
生成項目後,腳手架爲了「優雅」... ...隱藏了全部的webpack相關的配置文件,此時查看myapp文件夾目錄,會發現找不到任何webpack配置文件。執行如下命令:github
npm run eject
查看myapp 文件夾,能夠看到完整的項目結構:web
myapp/ node_modules/ /*這個是全部下載的依賴*/ package.json .gitignore config/ paths.js polyfills env.js webpack.config.dev.js webpack.config.prod.js public/ index.html /* 入口html文件 */ scripts/ <b>build.js</b> /*打包命令配置文件*/ <b>start.js</b> /*啓動命令配置文件*/ test.js src/ App.js index.js /* 主入口文件 */
放上webpack 、npm 的充電傳送門: 【webpack學習教程】npm
查看package.json文件的scripts,json
"scripts": { "start": "node scripts/start.js", "build": "node scripts/build.js", },
可知,運行時是直接執行scripts文件目錄下的js文件。
其中*start.js*爲開發環境,*build.js*爲打包腳本。
build.js 此處打包 生成的 文件 路徑引用有問題
解決方法在另一片文章中react.js - 基於create-react-app的打包後文件根路徑修改
Facebook官方在create-react-app升級到某一版本,忽然丟掉了默認對sass、less等預處理器的支持,官方文檔說明
因而,只能本身動手,在config目錄下,webpack.config.dev.js 和 webpack.config.prod.js文件,沒有抽出 loader、postcss之類通常共用的配置,因而,在兩個文件夾都要一塊兒配置,也能夠抽出共用部分,以便維護。
這裏以webpack.config.dev.js舉例,webpack.config.prod.js同樣配置便可:
SASS-loader:
一、命令行,在當前目錄執行:npm install sass-loader node-sass --save-dev
二、找到webpack.config.dev.js文件中 loaders中的第一項exclude(值爲數組),排除scss文件,不然將被'url-loader'捕獲。
{ exclude: [ /\.html$/, /\.(js|jsx)(\?.*)?$/, /\.css$/, /\.json$/, /\.svg$/, /\.scss$/ ....新增項! ]
三、loaders新增一項:
{ test: /\.scss$/, loader: 'style!css!postcss!sass?outputStyle=expanded' },
至此,SASS文件就能夠正常打包了(此處針對SCSS文件,如用到SASS,可將SCSS的正則修改下),LESS文件相似,再也不贅述。
在命令行執行:
npm install antd-mobile --save
因0.8之後的版本引入移動端高清方案,所以須要在webpack等增長相應配置,**必須配置!**,官方說明 按官方說明配置便可。
爲減小打包後體積以及方便書寫,使用babel-plugin-import實現Antd按需加載,修改package.json,或者在項目根目錄新建文件.babelrc寫配置,注意是二選一。
import {Picker} from 'antd-mobile';
自動引入CSS和JS,無需再引入整個antd-mobile的整個CSS文件
使用以下:
命令行執行:
npm install babel-plugin-import --save-dev
1)package.json
"babel": { "presets": [ "react-app" ], "plugins": [ [ "import", { "libraryName": "antd", "style": true } ] ] },
2).babelrc
{ "presets": [ "react-app" ], "plugins": [ [ "import", { "libraryName": "antd", "style": true } ] ] }
注意: 不要認爲package.json裏已有presets配置這裏就不用寫,這裏的.babelrc會覆蓋package.json裏帶有的babel配置,若是刪除presets配置,會報錯。
如今最新版本React-Router爲4.x.x,與原用的2.x.x的API變化稍大(官方直接跳過了3...),如需使用2.x.x版本,可先卸載router,執行命令
pm remove react-router --save
而後在package.json中dependencies新增字段:
"react-router": "^2.0.0 < 3.0.0",
接着執行:
npm install
《《後續》》===============================================
一. React-app-rewired(一個對 create-react-app 進行自定義配置的社區解決方案)。
npm install --save-dev react-app-rewired
/* package.json */ "scripts": { "start": "react-app-rewired start", "build": "react-app-rewired build", "test": "react-app-rewired test --env=jsdom", }
module.exports = function override(config, env) { // do stuff with the webpack config... return config; };
npm install --save-dev babel-plugin-import
/* config-overrides.js */ const { injectBabelPlugin } = require('react-app-rewired'); module.exports = function override(config, env) { config = injectBabelPlugin(['import', { libraryName: 'antd', style: 'css'}], config); return config; };
5.使用react-app-rewire-less配置Less
npm install --save-dev react-app-rewire-less
/* config-overrides.js */ const { injectBabelPlugin } = require('react-app-rewired'); const rewireLess = require('react-app-rewire-less'); module.exports = function override(config, env) { config = injectBabelPlugin(['import', { libraryName: 'antd', style: true }], config); config = rewireLess.withLoaderOptions({ modifyVars: { "@primary-color": "#1DA57A" }, })(config, env); return config; };
我遇到的問題:
npm install --save-dev react-app-rewire-defind-plugin
/* config-overrides.js */ const { injectBabelPlugin } = require('react-app-rewired'); const rewireLess = require('react-app-rewire-less'); const rewireDefinePlugin = require('react-app-rewire-define-plugin'); module.exports = function override(config, env) { config = injectBabelPlugin(['import', { libraryName: 'antd', style: true }], config); config = rewireLess.withLoaderOptions({ modifyVars: { "@primary-color": "#1DA57A" }, })(config, env); config = rewireDefinePlugin(config, env, { __DEV__: false }); return config; };
二. npm run eject 暴露全部內建的配置
npm install --save-dev babel-plugin-import
1)package.json
"babel": { "presets": [ "react-app" ], "plugins": [ [ "import", { "libraryName": "antd", "style": true } ] ] },
2).babelrc
{ "presets": [ "react-app" ], "plugins": [ [ "import", { "libraryName": "antd", "style": true } ] ] }
注意: 不要認爲package.json裏已有presets配置這裏就不用寫,這裏的.babelrc會覆蓋package.json裏帶有的babel配置,若是刪除presets配置,會報錯。
1)安裝less-loader 和 less
npm install --save-dev less-loader less
2)修改config文件夾下的webpack.config.dev.js和webpack.config.prod.js文件(都須要修改) 查找 :exclude 本來的 exclude: [/\.js$/, /\.html$/, /\.json$/],
修改成 exclude: [/\.html$/, /\.(js|jsx)$/, /\.(css|less)$/, /\.json$/, /\.bmp$/, /\.gif$/, /\.jpe?g$/, /\.png$/],
查找:test: /.css$/ 本來的 test: /\.css$/,
修改成 test: /\.(css|less)$/,
在這個test的下面找到use,添加loader
use: [ {...}, {...}, { loader: require.resolve('less-loader') // compiles Less to CSS } ],
ok,以上兩種方式修改配置,擇優選取。 若是引入Antd,可能依賴於引入Less, 若是不想引入Antd,能夠捨棄Antd部分,按步驟引入Less。
後續 我會把配置好的git 地址貼上 供你們參考,如有不足 請指出