欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Webpack處理js資源(Eslint、Babel)

 更新時間:2023年12月14日 10:34:02   作者:杜同學(xué)。  
Webpack對js處理是有限的,只能編譯js中ES模塊化語法,不能編譯其他語法,導(dǎo)致js不能在IE等瀏覽器運行,本文主要介紹了Webpack處理js資源,具有一定的參考價值,感興趣的可以了解一下

這里會有一個普遍性問題,就是js 資源 Webpack 本身就是可以處理的,為什么我們還要處理呢?

原因在于 Webpack 對 js 處理是有限的,只能編譯 js 中 ES 模塊化語法,不能編譯其他語法,導(dǎo)致 js 不能在 IE 等瀏覽器運行,所以我們希望做一些兼容性處理。

還有在開發(fā)過程中,開發(fā)團隊是對代碼格式是有嚴格要求的,肉眼的檢測不僅局限且費時費力,我們需要使用專業(yè)的工具來檢測。代碼的檢測就是使用 Eslint,然后再由 Babel 做代碼兼容性處理。

Eslint代碼檢測

Eslint是可組裝的 JavaScript 和 JSX 檢查工具。也就是說它是用來檢測 js 和 jsx 語法的工具,可以配置各項功能。我們使用 Eslint,關(guān)鍵是寫 Eslint 配置文件,里面寫上各種 rules 規(guī)則,將來運行 Eslint 時就會以寫的規(guī)則對代碼進行檢查。

1.Eslint的配置

它配置文件由很多種寫法:

- `.eslintrc.*`:新建文件,位于項目根目錄
  - `.eslintrc`
  - `.eslintrc.js`
  - `.eslintrc.json`
  - 區(qū)別在于配置格式不一樣
- `package.json` 中 `eslintConfig`:不需要創(chuàng)建文件,在原有文件基礎(chǔ)上寫

主要配置上述一種方式,ESLint 會查找和自動讀取它們。

這里以 `.eslintrc.js` 配置文件為例:

module.exports = {
  // 解析選項
  parserOptions: {},
  // 具體檢查規(guī)則
  rules: {},
  // 繼承其他規(guī)則
  extends: [],
  // ...
};

  其他規(guī)則可參考開發(fā)文檔:https://eslint.bootcss.com/docs/user-guide/configuring

1.1 parserOptions 解析選項

parserOptions: {
  ecmaVersion: 6, // ES 語法版本
  sourceType: "module", // ES 模塊化
  ecmaFeatures: { // ES 其他特性
    jsx: true // 如果是 React 項目,就需要開啟 jsx 語法
  }
}

1.2 rules 具體規(guī)則

- `"off"` 或 `0` - 關(guān)閉規(guī)則
- `"warn"` 或 `1` - 開啟規(guī)則,使用警告級別的錯誤:`warn` (不會導(dǎo)致程序退出)
- `"error"` 或 `2` - 開啟規(guī)則,使用錯誤級別的錯誤:`error` (當被觸發(fā)的時候,程序會退出)

rules: {
  semi: "error", // 禁止使用分號
  'array-callback-return': 'warn', // 強制數(shù)組方法的回調(diào)函數(shù)中有 return 語句,否則警告
  'default-case': [
    'warn', // 要求 switch 語句中有 default 分支,否則警告
    { commentPattern: '^no default$' } // 允許在最后注釋 no default, 就不會有警告了
  ],
  eqeqeq: [
    'warn', // 強制使用 === 和 !==,否則警告
    'smart' // https://eslint.bootcss.com/docs/rules/eqeqeq#smart 除了少數(shù)情況下不會有警告
  ],
}

其他配置規(guī)則可參考開發(fā)文檔:https://eslint.bootcss.com/docs/rules/

具體繼承方式示例如下:

module.exports = {
  extends: ["react-app"],
  rules: {
    // 我們的規(guī)則會覆蓋掉react-app的規(guī)則
    // 所以想要修改規(guī)則直接改就是了
    eqeqeq: ["warn", "smart"],
  },
};

2.Eslint在Webpack中的使用

2.1 下載對應(yīng)插件

npm i eslint-webpack-plugin eslint -D

2.2 定義配置文件

創(chuàng)建  .eslintrc.js  文件:

module.exports = {
  // 繼承 Eslint 規(guī)則
  extends: ["eslint:recommended"],
  env: {
    node: true, // 啟用node中全局變量
    browser: true, // 啟用瀏覽器中全局變量
  },
  parserOptions: {
    ecmaVersion: 6,
    sourceType: "module",
  },
  rules: {
    "no-var": 2, // 不能使用 var 定義變量
  },
};

2.3.修改webpack.config.js配置文件

const path = require("path");
const ESLintWebpackPlugin = require("eslint-webpack-plugin"); //引入Eslint插件

module.exports = {
  entry: "./src/main.js",
  output: {
    path: path.resolve(__dirname, "dist"),
    filename: "static/js/main.js", // 將 js 文件輸出到 static/js 目錄中
    clean: true, // 自動將上次打包目錄資源清空
  },
  module: {
    rules: [
      {
        // 用來匹配 .css 結(jié)尾的文件
        test: /\.css$/,
        // use 數(shù)組里面 Loader 執(zhí)行順序是從右到左
        use: ["style-loader", "css-loader"],
      },
      {
        test: /\.less$/,
        use: ["style-loader", "css-loader", "less-loader"],
      },
      {
        test: /\.s[ac]ss$/,
        use: ["style-loader", "css-loader", "sass-loader"],
      },
      {
        test: /\.(png|jpe?g|gif|webp)$/,
        type: "asset",
        parser: {
          dataUrlCondition: {
            maxSize: 10 * 1024, // 小于10kb的圖片會被base64處理
          },
        },
      },
    ],
  },
  //插件
  plugins: [
    new ESLintWebpackPlugin({
      // 指定檢查文件的根目錄
      context: path.resolve(__dirname, "src"),
      exclude:"node_modules", //排除node_module中的js文件
      cache:true,//開啟緩存,提升代碼檢查速度
      cacheLocation:path.resolve(__dirname,'../node_modules/.cache/esLintcach'),
    }),
  ],
  mode: "development",
};

2.4輸出檢測結(jié)果

運行如下指令,在控制臺即查看 Eslint 檢查效果

npx webpack

3.Eslint在VSCode中的使用

下載 Eslint 插件,即可不用編譯就能看到錯誤,可以提前解決,但是此時就會對項目所有文件默認進行 Eslint 檢查了,我們 dist 目錄下的打包后文件就會報錯。但是我們只需要檢查 src 下面的文件,不需要檢查 dist 下面的文件。

所以可以使用 Eslint 忽略文件解決。在項目根目錄新建下面文件:

`.eslintignore`

```
# 忽略dist目錄下所有文件
dist
```

Babel的使用

主要用于將 ES6 語法編寫的代碼轉(zhuǎn)換為向后兼容的 JavaScript 語法,以便能夠運行在當前和舊版本的瀏覽器或其他環(huán)境中

1.Babel的配置

配置文件由很多種寫法:

- `babel.config.*`:新建文件,位于項目根目錄
  - `babel.config.js`
  - `babel.config.json`
- `.babelrc.*`:新建文件,位于項目根目錄
  - `.babelrc`
  - `.babelrc.js`
  - `.babelrc.json`
- `package.json` 中 `babel`:不需要創(chuàng)建文件,在原有文件基礎(chǔ)上寫

Babel 會查找和自動讀取它們,所以以上配置文件只需要存在一個即可,以 `babel.config.js` 配置文件為例:

module.exports = {
  // 預(yù)設(shè)
  presets: [],
};

 1.1 presets 預(yù)設(shè)

簡單理解:這就是一組 Babel 插件, 擴展 Babel 功能

- `@babel/preset-env`: 一個智能預(yù)設(shè),允許您使用最新的 JavaScript。

- `@babel/preset-react`:一個用來編譯 React jsx 語法的預(yù)設(shè)

- `@babel/preset-typescript`:一個用來編譯 TypeScript 語法的預(yù)設(shè)

2. Babel在webpack中的使用

2.1 下載對應(yīng)Loader

npm i babel-loader @babel/core @babel/preset-env -D

2.2  定義 Babel 配置文件

- babel.config.js

```js
module.exports = {
  presets: ["@babel/preset-env"],
};
```

 2.3 修改webpack.config.js配置文件

這里其實就是在rules配置中新添加了一個處理js文件的規(guī)則:

const path = require("path");
const ESLintWebpackPlugin = require("eslint-webpack-plugin"); //引入Eslint插件

module.exports = {
  entry: "./src/main.js",
  output: {
    path: path.resolve(__dirname, "dist"),
    filename: "static/js/main.js", // 將 js 文件輸出到 static/js 目錄中
    clean: true, // 自動將上次打包目錄資源清空
  },
  module: {
    rules: [
      {
        // 用來匹配 .css 結(jié)尾的文件
        test: /\.css$/,
        // use 數(shù)組里面 Loader 執(zhí)行順序是從右到左
        use: ["style-loader", "css-loader"],
      },
      {
        test: /\.less$/,
        use: ["style-loader", "css-loader", "less-loader"],
      },
      {
        test: /\.s[ac]ss$/,
        use: ["style-loader", "css-loader", "sass-loader"],
      },
      {
        test: /\.(png|jpe?g|gif|webp)$/,
        type: "asset",
        parser: {
          dataUrlCondition: {
            maxSize: 10 * 1024, // 小于10kb的圖片會被base64處理
          },
        },
      },
       //這是新添加的使用Babel兼容js語法的規(guī)則
      {
        test: /\.js$/,
        exclude: /node_modules/, // 排除node_modules代碼不編譯
        loader: "babel-loader",
      },
    ],
  },
  //插件
  plugins: [
    new ESLintWebpackPlugin({
      // 指定檢查文件的根目錄
      context: path.resolve(__dirname, "src"),
      exclude:"node_modules", //排除node_module中的js文件
      cache:true,//開啟緩存,提升代碼檢查速度
      cacheLocation:path.resolve(__dirname,'../node_modules/.cache/esLintcach'),
    }),
  ],
  mode: "development",
};

2.4 運行指令兼容js

npx webpack

打開打包后的 `dist/static/js/main.js` 文件查看,我們就會發(fā)現(xiàn)箭頭函數(shù)等 ES6 語法已經(jīng)轉(zhuǎn)換了

到此這篇關(guān)于Webpack處理js資源(Eslint、Babel)的文章就介紹到這了,更多相關(guān)Webpack處理js資源內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論