webpack + eslint

工欲善其事必先利其器

前面用gulp 和 gulp-jshint 、sublimeText + jshint 檢測(cè)了代碼,但是需要自己編寫.jshintrc文件,一直想試一下airbub的編碼規(guī)范,但是奈何一直沒找到sublimeText配置的資料,今天來試一下webpack + eslint的組合使用airbub的編碼規(guī)范

新建項(xiàng)目

npm init

注意project name不能與需要依賴的包同名,否者安裝不上;比如project name為webpack安裝webpack時(shí)候會(huì)提示一下錯(cuò)誤

Refusing to install package with name "webpack" under a package
npm ERR! also called "webpack". Did you name your project the same
npm ERR! as the dependency you're installing?

webpack-dev-server搭建本地服務(wù)器

npm install webpack-cli -D
npm i webpack-dev-server -D

然后在項(xiàng)目根文件目錄下執(zhí)行命令即可開啟服務(wù)器

webpack-dev-server

安裝webpack

npm install webpack -g
npm i webpack -D

項(xiàng)目文件根目錄下新建webpack.config.js,代碼如下

module.exports = {
    // __dirname為node的變量,表示當(dāng)前所在的根目錄
    entry: __dirname + '/src/main.js',
    output: {
        path: __dirname + '/dest',
        filename: 'bundle.js'
    }
};

然后在根目錄下執(zhí)行命令webpack就會(huì)發(fā)現(xiàn)文件已經(jīng)打包好了,但是會(huì)有一個(gè)警告

WARNING in configuration
The 'mode' option has not been set, webpack will fallback to 'production' for this value. Set 'mode' option to 'development' or 'production' to enable defaults for each environment.
You can also set it to 'none' to disable any default behavior. Learn more: https://webpack.js.org/concepts/mode/

根據(jù)顯示是mode未指定,在執(zhí)行webpack的時(shí)候可以指定mode有webpack --mode development開發(fā)模式與webpack --mode production生產(chǎn)模式;區(qū)別在于開發(fā)模式打包之后的代碼不壓縮,生產(chǎn)模式打包的代碼會(huì)被壓縮
也可直接在package.json里面指定命令

...
"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "dev": "webpack --mode development",
    "bulid": "webpack --mode production"
  },
...

但是在打包后的代碼中,es6的代碼并沒有轉(zhuǎn)換成es5

image.png

安裝babel-loader 與 babel-preset-es2015

webpack中使用bable-loader

npm install babel-loader babel-preset-es2015

然后在webpack.config.js配置module

module: {
        rules: [{
            test: /(\.jsx|\.js)$/,
            use: {
                loader: 'babel-loader',
                options: {
                    presets: ['es2015']
                }
            },
            exclude: /node_modules/
        }]
    }

再次執(zhí)行npm run dev發(fā)現(xiàn)代碼已被轉(zhuǎn)換成es5代碼

image.png

安裝eslint-loader

接著安裝eslint代碼檢查,webpack的插件都是放在module里面的loader模塊引入使用的

npm i eslint-loader -D

然后在webpack.config.js中配置

module: {
        rules: [
            {
                test: /\.js$/,
                use: {
                    loader: 'eslint-loader',
                    options: {
                        formatter: require('eslint-friendly-formatter') // 默認(rèn)的錯(cuò)誤提示方式
                    }
                },
                enforce: 'pre', // 編譯前檢查
                exclude: /node_modules/, // 不檢測(cè)的文件
                include: [__dirname + '/src'], // 要檢查的目錄
            }
        ]
    }

然后新建.eslintrc.js

module.exports = {
  root: true, // 作用的目錄是根目錄
  parserOptions: {
    sourceType: 'module' // 按照模塊的方式解析
  },
  env: {
    browser: true, // 開發(fā)環(huán)境配置表示可以使用瀏覽器的方法
  },
  rules: {
    // 自定義的規(guī)則
    "linebreak-style": [0 ,"error", "windows"],
    "indent": ['error', 4]
  }
}

配置詳見官網(wǎng)http://eslint.cn/docs/user-guide/

使用airbnb

安裝依賴包

npm install -g eslint-config-airbnb eslint-plugin-import eslint-plugin-react eslint-plugin-jsx-a11y babel-eslint

然后修改.eslintrc.js

module.exports = {
  root: true, // 作用的目錄是根目錄
  parserOptions: {
    sourceType: 'module' // 按照模塊的方式解析
  },
  env: {
    browser: true, // 開發(fā)環(huán)境配置表示可以使用瀏覽器的方法
  },
  extends: 'airbnb', // 導(dǎo)入airbnb規(guī)則
  rules: {
    // 自定義的規(guī)則
    "linebreak-style": [0 ,"error", "windows"],
    "indent": ['error', 4]
  }
}

然后執(zhí)行以下命令檢測(cè)

eslint --ext .js,.vue src

通過eslint命令可以查看參數(shù)列表,例如

eslint src //掃描src目錄下的.js文件
eslint --ext .js,.vue src // 掃描src下的.js與.vue后綴文件(默認(rèn)只掃描.js文件)
eslint --fix src // 修正src下面的.js文件格式錯(cuò)誤(會(huì)自動(dòng)調(diào)整文件)

使用standard

通常使用的插件有 airbnb 外還有 standard
如果不記得以上這么多依賴插件的話,可以先安裝

npm install -g eslint-config-standard

然后修改.eslintrc.js的 extends 參數(shù)
在執(zhí)行eslint src的時(shí)候會(huì)提示缺少的包,然后按照提示安裝就行

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容