webpack成神之路(三)

  1. 現(xiàn)在我們來處理js模塊饭宾,比如es6語法轉(zhuǎn)換為es5語法性湿。這里就需要babel-loader模塊了算墨。https://www.npmjs.com/package/babel-loader
  • 安裝 cnpm install -D babel-loader @babel/core @babel/preset-env
  • webpack.config.js中配置


    image.png
  • 把模式改為development, 在index.js中使用箭頭函數(shù)


    image.png
  • npm run build可以看到打包后的js中箭頭函數(shù)轉(zhuǎn)換為es5了;
    image.png
  1. 現(xiàn)在我們使用es6里面的 class


    image.png
  • 直接就報(bào)錯了捎琐,需要配置@babel/plugin-proposal-class-properties


    image.png
  • 我們到babel官網(wǎng)搜索這個(gè)插件在塔,https://babeljs.io/docs/en/babel-plugin-proposal-class-properties

  • 然后 按官網(wǎng)說的安裝 npm install --save-dev @babel/plugin-proposal-class-properties

  • 安裝好之后蛔溃,webpack.config.js中按官方配置


    image.png

    頁面控制臺正常打印了


    image.png
  1. 現(xiàn)在我們要給class 類添加 @log 裝飾器


    image.png
  1. 現(xiàn)在我們在a.js中再定義一個(gè)類以及一個(gè)generator;讓我們來看一下有什么需要改進(jìn)的雁比。


    image.png
  • npm run build我們首先看打包后的js偎捎≤钏看一下class的問題程奠;在a模塊有個(gè)函數(shù)_classCallCheck處理class梦染,在index模塊也有一個(gè)函數(shù)_classCallCheck處理class.
    a.js

    index.js
  • 這里相同的函數(shù)沒有提取出來泛粹,如果有很多個(gè)模塊都拿會重復(fù)很多代碼肮疗;
  • 我們繼續(xù)npm run serve啟動頁面伪货。看一下控制臺宗侦;告訴我們r(jià)egeneratorRuntime is not defined
    image.png
  • 原因也是打包的時(shí)候?qū)enerator進(jìn)行了轉(zhuǎn)換矾利,但是轉(zhuǎn)換之后并沒有這種幫助馋袜,所以報(bào)錯男旗。
  • 我們開發(fā)環(huán)境安裝 npm install --save-dev @babel/plugin-proposal-class-properties 以及生產(chǎn)環(huán)境需要的 cnpm install --save @babel/runtime
  • 我們把webpack里面的babel配置拿到根目錄下欣鳖,創(chuàng)建.babelrc察皇;
{
  "presets": ["@babel/preset-env"],
  "plugins": [
    "@babel/plugin-transform-runtime",
    [
      "@babel/plugin-proposal-decorators",
      {
        "legacy": true
      }
    ],
    [
      "@babel/plugin-proposal-class-properties",
      {
        "loose": true
      }
    ]
  ]
}
image.png

現(xiàn)在啟動服務(wù),控制臺不報(bào)錯了泽台,而且打包后也可以看到多了很多代碼什荣,就是把很多需要用的代碼提出來了。

  1. 現(xiàn)在我們在index.js中使用es7語法
    image.png
  • 打包后發(fā)現(xiàn)includes語法沒有轉(zhuǎn)換 ,現(xiàn)在我們需要一個(gè)模塊 cnpm install --save @babel/polyfill

  • 在使用的js中引入


    image.png
  • 打包后可以在打包后的文件里看到师痕,Array.protype上添加了includes方法溃睹,就可以兼容不支持es7語法的瀏覽器了


    image.png
  1. 現(xiàn)在我們可以給我們的js添加語法規(guī)范eslint;
  • cnpm i --save-dev eslint eslint-loader安裝

  • webpck.config.js中配置


    image.png
  • 其中注意一下enforce: 'pre'胰坟,意思是如果要匹配多個(gè)js時(shí)因篇,先執(zhí)行當(dāng)前這個(gè)js的匹配。

  • 然后打包笔横,可以看到 一些不符合eslint規(guī)范的代碼竞滓,后面可以自己慢慢改。我們現(xiàn)在這個(gè)不是重點(diǎn)吹缔,先webpack中注釋掉商佑。


    image.png
  • webpack.config.js


const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const TerserJSPlugin = require('terser-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');

module.exports = {
    mode: 'development',  // development production
    optimization: {
        minimizer: [new UglifyJsPlugin(
            {
                cache: true,  // 啟用cache緩存
                parallel: true, // 并發(fā)打包
                sourceMap: true, // 映射原代碼地址
              }
        ), new TerserJSPlugin({}), new OptimizeCSSAssetsPlugin({})],
    },
    entry: './src/index.js', 
    output: {
        filename: "index.[hash:8].js",
        path: path.resolve(__dirname, 'build')  
    },
    devServer: {
        port: 8080, 
        contentBase: './', 
    },
    plugins: [  
        new CleanWebpackPlugin(),
        new HtmlWebpackPlugin({
            template: './index.html',  
            filename: 'index.html', 
            minify: {  
                removeAttributeQuotes: true,
                collapseWhitespace: true, 
            }
        }),
        new MiniCssExtractPlugin({
            filename: '[name].css',
            chunkFilename: '[id].css',
          }),
    ],
    module: { // 模塊
        rules: [
            {
                test: /\.css$/,
                use: [MiniCssExtractPlugin.loader, 'css-loader','postcss-loader'] 
            },
            {
                test: /\.less$/,
                use: [MiniCssExtractPlugin.loader, 'css-loader','postcss-loader', 'less-loader']
            },
            // {
            //     test: /\.js$/,
            //     exclude: /node_modules/,
            //     include: path.resolve(__dirname, 'src'),
            //     use:{
            //         loader: 'eslint-loader',
            //         options:{
            //             enforce: 'pre'  // pre匹配到的js先執(zhí)行   post后執(zhí)行 
            //         }
            //     }
            // },
            {
                test: /\.js$/,
                exclude: /node_modules/,
                include: path.resolve(__dirname, 'src'),
                use: {
                  loader: 'babel-loader',
                //   options: {
                //     presets: ['@babel/preset-env'],
                //     "plugins": [
                //         ["@babel/plugin-proposal-decorators", { "legacy": true }],
                //         ["@babel/plugin-proposal-class-properties", { "loose" : true }]
                //       ]
                //   }
                }
              }

        ]
    }
}
  • .babelrc
{
  "presets": ["@babel/preset-env"],
  "plugins": [
    "@babel/plugin-transform-runtime",
    [
      "@babel/plugin-proposal-decorators",
      {
        "legacy": true
      }
    ],
    [
      "@babel/plugin-proposal-class-properties",
      {
        "loose": true
      }
    ]
  ]
}

下一篇webpack成神之路(四) http://www.reibang.com/p/3fb13da2fa14

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市厢塘,隨后出現(xiàn)的幾起案子茶没,更是在濱河造成了極大的恐慌,老刑警劉巖晚碾,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抓半,死亡現(xiàn)場離奇詭異,居然都是意外死亡格嘁,警方通過查閱死者的電腦和手機(jī)笛求,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人探入,你說我怎么就攤上這事狡孔。” “怎么了蜂嗽?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵苗膝,是天一觀的道長。 經(jīng)常有香客問我植旧,道長荚醒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任隆嗅,我火速辦了婚禮,結(jié)果婚禮上侯繁,老公的妹妹穿的比我還像新娘胖喳。我一直安慰自己,他們只是感情好贮竟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布丽焊。 她就那樣靜靜地躺著,像睡著了一般咕别。 火紅的嫁衣襯著肌膚如雪技健。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天惰拱,我揣著相機(jī)與錄音雌贱,去河邊找鬼。 笑死偿短,一個(gè)胖子當(dāng)著我的面吹牛欣孤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播昔逗,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼降传,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了痢站?” 一聲冷哼從身側(cè)響起糖驴,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤荷科,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后段只,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡卡乾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年翼悴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,991評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鹦赎,死狀恐怖谍椅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情古话,我是刑警寧澤雏吭,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站陪踩,受9級特大地震影響杖们,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜肩狂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一摘完、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧傻谁,春花似錦孝治、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至态蒂,卻和暖如春杭措,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背钾恢。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工手素, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赘那。 一個(gè)月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓刑桑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親募舟。 傳聞我的和親對象是個(gè)殘疾皇子祠斧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評論 2 355