您好,登錄后才能下訂單哦!
這篇文章主要介紹Webpack 4.x怎樣搭建react開發(fā)環(huán)境,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
Webpack 4.x搭建react開發(fā)環(huán)境的方法步驟
必要依賴一覽(npm install) 安裝好。
"dependencies": { "babel-core": "^6.26.3", "babel-loader": "^7.1.5", "babel-preset-env": "^1.7.0", "react": "^16.4.2", "react-dom": "^16.4.2", "webpack": "^4.16.5" ... }
babel系列是干什么用的呢?是為了支持es6以上的高級語法的編譯。但是因為react有jsx這個東西存在,所以單純的babel是不夠的,此外要讓babel作用于webpack,需要給webpack添加一個loader(以前版本叫l(wèi)oader,4.x版本開始改用‘rules'),在工程根目錄新建webpack.config.js文件,并添加如下代碼:
var path = require('path'); var node_modules = path.resolve(__dirname, 'node_modules'); var deps = [ ]; //以上代碼可以忽略,沒有必要不要添加noParse,因為依賴代碼中可能會有環(huán)境的判斷,而瀏覽器中是拿不到process變量的,會報錯! var config = { //這里是打包的入口 entry: path.resolve(__dirname, './react/app.js'), resolve: { alias: { } }, //打包完成后輸出到./build/bundle.js文件中 output: { path: path.resolve(__dirname, './build'), filename: 'bundle.js', }, mode: 'development', module: { //上述的規(guī)則,loader就放在這里,這段沒什么好說的,從Webpack官方文檔上直接拿來用 rules: [ { test: /\.js$/, exclude: /(node_modules|bower_components)/, use: { loader: 'babel-loader', options: { //剛剛下載的module之一 presets: ['babel-preset-env'] } } } ] } }; //遍歷你的自定義要排除的依賴,安裝到node_modules里的依賴一般不需要排除掉 deps.forEach(function (dep) { var depPath = path.resolve(node_modules, dep); config.resolve.alias[dep.split(path.sep)[0]] = depPath; config.module.noParse.push(depPath); }); module.exports = config;
以上代碼可以直接用,請先將注釋去掉。有了以上文件配置,你可以直接在package.json中添加scripts來打包你的app.js。
... "scripts": { ... "build-config": "webpack", ... } ...
執(zhí)行npm run build-config
可執(zhí)行打包操作,但是目前為止還是會報錯,因為缺少babel設置,webpack打包時無法識別jsx語法,什么時jsx語法?就是在js代碼中寫的類似于dom結構的東西,如下:
... <h2 onClick={this.handleClick.bind(this)} style={{ color: "red" }}> {'Hello ' + this.state.text} </h2> ...
要解析這個東西還需要添加.babelrc文件,在其中添加:
{ "plugins": ["transform-react-jsx"] }
這句主要是說在babel參與打包時,會啟用jsx轉換成js的插件。到這里你已經可以成功打出你想要的bundle.js
> webpack Hash: e716d360a6a752006c09 Version: webpack 4.16.5 Time: 973ms Built at: 2018-08-14 15:19:14 Asset Size Chunks Chunk Names bundle.js 715 KiB main [emitted] main Entrypoint main = bundle.js [./react/app.js] 2.74 KiB {main} [built] + 21 hidden modules
webpack打包的好處就是這里,可以讓你的app加載速度更快,如上的包總計715kb,隱藏了沒有用到的模塊21個。這就是為什么要搭手腳架開發(fā)的理由。
jsx-transform的坑
此外還有一點要說一下,就是在引入React時,請整個引入,要么就額外引入它在編譯后的代碼中可能會用到的api,否則會說什么什么沒找到而導致頁面加載不出來。看編譯后的代碼:
var _react = __webpack_require__(/*! react */ "./node_modules/react/index.js"); var _react2 = _interopRequireDefault(_react); ... _createClass(MyTitle, [{ key: "handleClick", value: function handleClick() { this.setState({ text: "Clicked" }); } }, { key: "render", value: function render() { return _react2.default.createElement( "h2", { onClick: this.handleClick.bind(this), style: { color: "red" } }, 'Hello ' + this.state.text ); } }]);
如果你不引入react, 編譯后render()函數(shù)中的_react2會是React.createElement而React顯然是找不到這個變量的??吹骄幾g后的代碼,你可能更能理解,哦在jsx的dom中那樣寫原來是這個意思啊···
Vscode中開發(fā),需要配置好eslint
react中有大量的es6的寫法,如果不配置eslint你會看到大量飄紅,首先是在項目的開發(fā)環(huán)境安裝依賴:
"devDependencies": { ··· "eslint": "^5.3.0", "eslint-plugin-import": "^2.14.0" ··· }
在項目根路徑下添加.eslintrc.json,并添加以下代碼[^eslint]:
{ "parserOptions": { //使用的ecma版本 "ecmaVersion": 6, "sourceType": "module", //使用jsx特性 "ecmaFeatures": { "jsx": true } }, "rules": { //忽略console的警告 "no-console": "off", "semi": ["error", "always"] } }
參考:
eslint官方文檔
babel-plugin-transform-jsx文檔
webpack4.15.1 官方文檔
babelrc 配置文檔
React+Webpack快速上手指南(雖然已經過時,還有部分不適用,但是還是借鑒了一部分代碼)
阮一峰 四課時培訓課,雖然過時,但是還是能帶你體驗一番前端開發(fā)
以上是“Webpack 4.x怎樣搭建react開發(fā)環(huán)境”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業(yè)資訊頻道!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。