成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

webpack2-update之路

elva / 3137人閱讀

摘要:重要特性枚舉特性增加了對特性的支持。重要特性另一個就是基于靜態(tài)模塊分析僅支持標(biāo)準(zhǔn)寫法。這樣之后整體只能通過的方式。另外在使用過程中默認(rèn)是將和轉(zhuǎn)為所以需要關(guān)閉預(yù)設(shè)功能。這樣做的目的就是為了項(xiàng)目工程化實(shí)現(xiàn)大項(xiàng)目的分工協(xié)作提高開發(fā)效率。

引言

這里是webpack official提供的一到二的升級指南,二兼容一的寫法,給我的感覺是二的寫法更規(guī)范,使用起來也比較簡潔。

重要特性枚舉 特性1

webpack2增加了對es6特性的支持。支持import和export寫法。之前需要通過babel來弄這個。

重要特性tree-shaking(另一個就是rollup),基于es6靜態(tài)模塊分析(僅支持標(biāo)準(zhǔn)寫法)。大致原理就是通過分析js的AST,依賴檢查等步驟,建立一個"對象依賴樹",從而將被使用和被引用的的
對象抽出,合成最小可用程序集。

export function A() {

}
export function B() {

}
export default {
    "A":A,
    "B":B,
}

上面是反模式寫法,相當(dāng)于export default是把后面變量先賦值給default在輸出,輸出的是對象,沒法利用ES6模塊系統(tǒng)的多輸入多輸出特性。

正規(guī)寫法,分別輸出。這樣之后整體import只能通過import * as XXX的方式。

// export {
//     "A":A,
//     "B":B,
// }

做了個demo (case1),實(shí)驗(yàn)結(jié)果如下,效果還是比較明顯的。

說一下應(yīng)用場景,由于有些第三方庫,是編譯好的commonjs格式,雖然可以模塊化引入加載,但是沒法tree-shaking,除非你有未編譯的es6 source。
另外在使用過程中,babel 默認(rèn)是將import和export轉(zhuǎn)為require,所以需要關(guān)閉預(yù)設(shè)功能。

["env", {"modules": false}]

另外我想說的在做這個demo工程中,發(fā)現(xiàn)開啟tree-shaking后會標(biāo)記無用代碼,但是不會刪除,要做到真正的DCE,還需要進(jìn)行Uglify處理。

第二個應(yīng)用場景就是有利于組件化開發(fā),下面這個截圖中是平時使用到的vue component,每個component集成了html、js、css??梢宰鳛槎鄮ЫM件存在,
這些組件既具有重用性,同時也可以利用es6的模塊化機(jī)制結(jié)合webpack2,實(shí)現(xiàn)組件之間的依賴。這樣做的目的就是為了項(xiàng)目工程化,實(shí)現(xiàn)大項(xiàng)目的分工協(xié)作,提高開發(fā)效率。

特性2

loaders改名為rules,且寫loader時不能缺少后綴, 針對loader增加option參數(shù)。提倡這樣做。

options: {
                cacheDirectory: true,
                presets: [
                    ["es2015", {modules: false}] 
                ]
            }

舊版loader連接器寫法

loader: "style-loader!css-loader!less-loader"。

下面是我項(xiàng)目中的寫法,之前還遇到個坑,最后那一項(xiàng)拆開了就error了,這種寫法沒條理性,不易閱讀,不推薦。

 { test: /.styl$/, loader: ExtractTextPlugin.extract("style-loader", "css-loader!stylus-loader") }

新webpack2連接器寫法,非常好,簡介明了。

use: [
"style-loader",
"css-loader",
"less-loader"
]

特性3

resolve.extensions配置項(xiàng)將不再要求強(qiáng)制轉(zhuǎn)入一個空字符串,下面是我使用的配置。

resolve: {
        extensions: [".js", ".css",".sass", ".scss", ".less",  ".vue"],
    },

原先的話第一個為空,現(xiàn)在被移動到resolve.enforceExtension。

特性4

json-loader在2中已經(jīng)內(nèi)置,讀取json文件不用加loader。
取消module.preLoaders,具體用法如下所示

 preLoaders: [{
         test: /.js$/,
         loader: "eslint-loader",//webpack1寫法
         exclude: /node_modules/
         }]
-------------------------------------------------         
        rules: [{
            test: /.js$/,
            loader: "eslint-loader",
            exclude: /node_modules/,
            enforce: "pre" //webpack2寫法
        }      
特性5

1系列的ExtractTextPlugin不兼容wp2,需多帶帶安裝ExtractTextPlugin的v2版本

module: {
  rules: [
    {
      test: /.css$/,
-      loader: ExtractTextPlugin.extract("style-loader", "css-loader", { publicPath: "/dist" })
+      use: ExtractTextPlugin.extract({
+        fallback: "style-loader",
+        use: "css-loader",
+        publicPath: "/dist"
+      })
    }
  ]
}
--------------------------------------------------------------------------------------------------
plugins: [
-  new ExtractTextPlugin("bundle.css", { allChunks: true, disable: false })
+  new ExtractTextPlugin({
+    filename: "bundle.css",
+    disable: false,
+    allChunks: true
+  })
]
tips

在寫這個的過程中寫了個腳手架基于webpack2,自己以后項(xiàng)目開發(fā)打算就基于這個,還需要完善。

在寫這個過程中遇到幾個問題:

http://yeoman.io/generators/ 顯示不出來,說是one hour synchronize可是超過了一個小時還是沒看到。
在此的建議就是直接install yo一下試試看能不能用,不要干等著

npm run start而不是直接webpack-dev-server,前者基于當(dāng)前package.json中的版本,后者是基于系統(tǒng)版本。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/86957.html

相關(guān)文章

  • webpack源碼之tapable

    摘要:它的行為和的方法相似,用來注冊一個處理函數(shù)監(jiān)聽器,來在信號事件發(fā)生時做一些事情他最終還是調(diào)用進(jìn)行存儲。而就全部取出來執(zhí)行??偨Y(jié)上面這些知識是理解插件和運(yùn)行原理的前置條件更多內(nèi)容待下次分解參考源碼版本說明參考鏈接 引言 去年3月的時候當(dāng)時寫了一篇webpack2-update之路,到今天webpack已經(jīng)到了4.2,更新挺快的,功能也在不斷的完善,webpack4特性之一就是零配置, w...

    Keagan 評論0 收藏0
  • php底層原理之變量(二)

    摘要:但是對于結(jié)構(gòu)體中的和字段我們一直都沒有詳細(xì)介紹過,而這兩個字段其實(shí)是和變量之間賦值的原理有著密切的關(guān)系的。 上周我們從底層的角度介紹了php變量從生成->常量賦值->銷毀的完整生命周期(不了解的同學(xué)可以翻看一下前面的文章php底層原理之變量(一)),但是我們留了一個思考,不知道大家有答案了沒,變量之間的賦值在底層又是如何實(shí)現(xiàn)的呢? 變量之間賦值 php變量的zval結(jié)構(gòu),我們已經(jīng)介紹了...

    bladefury 評論0 收藏0
  • php底層原理之垃圾回收機(jī)制

    摘要:總結(jié)垃圾回收機(jī)制以的引用計數(shù)機(jī)制為基礎(chǔ)以前只有該機(jī)制同時使用根緩沖區(qū)機(jī)制,當(dāng)發(fā)現(xiàn)有存在循環(huán)引用的時,就會把其投入到根緩沖區(qū),當(dāng)根緩沖區(qū)達(dá)到配置文件中的指定數(shù)量后,就會進(jìn)行垃圾回收,以此解決循環(huán)引用導(dǎo)致的內(nèi)存泄漏問題開始引入該機(jī)制 php垃圾回收機(jī)制,對于PHPer來說是一個不陌生但是又不是很熟悉的內(nèi)容。那么php是怎么實(shí)現(xiàn)對不需要的內(nèi)存進(jìn)行回收的呢? php變量的內(nèi)部存儲結(jié)構(gòu) 首先還是...

    light 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<