中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Webpack 4.x怎樣搭建react開發環境

發布時間:2021-02-20 11:18:42 來源:億速云 閱讀:161 作者:小新 欄目:web開發

這篇文章主要介紹Webpack 4.x怎樣搭建react開發環境,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

Webpack 4.x搭建react開發環境的方法步驟

必要依賴一覽(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(以前版本叫loader,4.x版本開始改用‘rules'),在工程根目錄新建webpack.config.js文件,并添加如下代碼:

var path = require('path');
var node_modules = path.resolve(__dirname, 'node_modules');
var deps = [ 
 ];

//以上代碼可以忽略,沒有必要不要添加noParse,因為依賴代碼中可能會有環境的判斷,而瀏覽器中是拿不到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: {
   //上述的規則,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",
  ...
}
...

執行npm run build-config可執行打包操作,但是目前為止還是會報錯,因為缺少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個。這就是為什么要搭手腳架開發的理由。

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()函數中的_react2會是React.createElement而React顯然是找不到這個變量的。看到編譯后的代碼,你可能更能理解,哦在jsx的dom中那樣寫原來是這個意思啊···

Vscode中開發,需要配置好eslint

react中有大量的es6的寫法,如果不配置eslint你會看到大量飄紅,首先是在項目的開發環境安裝依賴:

"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快速上手指南(雖然已經過時,還有部分不適用,但是還是借鑒了一部分代碼)

  • 阮一峰 四課時培訓課,雖然過時,但是還是能帶你體驗一番前端開發

以上是“Webpack 4.x怎樣搭建react開發環境”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

逊克县| 岢岚县| 巴林右旗| 阿克苏市| 南昌市| 响水县| 佳木斯市| 广宗县| 承德市| 寻甸| 从江县| 文昌市| 拜城县| 阳新县| 澜沧| 安阳市| 师宗县| 渑池县| 奇台县| 营口市| 会理县| 容城县| 仙游县| 德庆县| 白河县| 富蕴县| 离岛区| 河西区| 靖州| 加查县| 台中县| 张北县| 曲靖市| 理塘县| 汤阴县| 济南市| 左权县| 黔西| 定日县| 潮州市| 北宁市|