成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

webpack2-update之路

elva / 3187人閱讀

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

引言

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

重要特性枚舉 特性1

webpack2增加了對(duì)es6特性的支持。支持import和export寫法。之前需要通過(guò)babel來(lái)弄這個(gè)。

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

export function A() {

}
export function B() {

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

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

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

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

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

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

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

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

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

特性2

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

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

舊版loader連接器寫法

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

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

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

新webpack2連接器寫法,非常好,簡(jiǎn)介明了。

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

特性3

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

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

原先的話第一個(gè)為空,現(xiàn)在被移動(dòng)到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

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

在寫這個(gè)過(guò)程中遇到幾個(gè)問(wèn)題:

http://yeoman.io/generators/ 顯示不出來(lái),說(shuō)是one hour synchronize可是超過(guò)了一個(gè)小時(shí)還是沒(méi)看到。
在此的建議就是直接install yo一下試試看能不能用,不要干等著

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/86957.html

相關(guān)文章

  • webpack源碼之tapable

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

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

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

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

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

    light 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<