新聞中心
因?yàn)閣ebpack是基于nodejs的一款工具,所以在學(xué)習(xí)過程中涉及到的nodejs知識(shí)也會(huì)進(jìn)行解釋進(jìn)行發(fā)散性拓展。
10年的洪澤網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都營(yíng)銷網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整洪澤建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“洪澤網(wǎng)站設(shè)計(jì)”,“洪澤網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
webpack中文文檔
一、module.exports
module.exports = { entry: './path/to/my/entry/file.js' };
exports 變量是在模塊的文件級(jí)作用域內(nèi)可用的,且在模塊執(zhí)行之前賦值給 module.exports在nodejs中,提供了exports 和 require 兩個(gè)對(duì)象,其中 exports 是模塊公開的接口,require 用于從外部獲取一個(gè)模塊的接口,即所獲取模塊的 exports 對(duì)象。而在exports拋出的接口中,如果你希望你的模塊就想為一個(gè)特別的對(duì)象類型,請(qǐng)使用module.exports;如果希望模塊成為一個(gè)傳統(tǒng)的模塊實(shí)例,請(qǐng)使用exports.xx方法;module.exports才是真正的接口,exports只不過是它的一個(gè)輔助工具。最終返回給調(diào)用的是module.exports而不是exports。這里引用nodejs官網(wǎng)的一個(gè) 例子
function require(/* ... */) { const module = { exports: {} }; ((module, exports) => {`請(qǐng)輸入代碼` // 模塊代碼在這。在這個(gè)例子中,定義了一個(gè)函數(shù)。 function someFunc() {} exports = someFunc;//也就是說你單獨(dú)給exports賦值時(shí)候exports不屬于module了是一個(gè)單獨(dú)的變量 // 此時(shí),exports 不再是一個(gè) module.exports 的快捷方式, // 且這個(gè)模塊依然導(dǎo)出一個(gè)空的默認(rèn)對(duì)象。 module.exports = someFunc;//這里導(dǎo)出的函數(shù)是掛在module里的所以會(huì)被導(dǎo)入 // 此時(shí),該模塊導(dǎo)出 someFunc,而不是默認(rèn)對(duì)象。 })(module, module.exports); return module.exports;//這里是這句話的解釋 (最終返回給調(diào)用的是module.exports而不是exports) }
二、entry
entry入口起點(diǎn),entry所配置的文件路徑所指向的文件為項(xiàng)目的入口文件也就是內(nèi)部依賴的開始會(huì)根據(jù)入口文件去逐層加載依賴。Chunk 和打包時(shí)入口文件配置有關(guān)如果 entry 是一個(gè) string 或 array ,就只會(huì)生成一個(gè) Chunk,這時(shí) Chunk 的名稱是 main,如果 entry 是一個(gè) object ,就可能會(huì)出現(xiàn)多個(gè) Chunk,這時(shí) Chunk 的名稱是 object 鍵值對(duì)里鍵的名稱。
entry接受三種類型值
1.單入口寫法 String 例:
entry: './app/to/my/entry/file.js' entry:{ main:"'./app/to/my/entry/file.js'"}
2.單入口數(shù)組寫法 Array例:
entry:['./app/entry1', './app/entry2']
在你想要多個(gè)依賴文件一起注入,并且將它們的依賴導(dǎo)向(graph)到一個(gè)“chunk”時(shí),傳入數(shù)組的方式就很有用。也就是說合并了多個(gè)文件的依賴模塊。
3.對(duì)象語(yǔ)法Object例:
entry:{ a: './app/entry-a', b: ['./app/entry-b1', './app/entry-b2']}
分離第三方模塊和公共模塊
分離第三方模塊和webpack運(yùn)行文件等類似公共模塊是為了避免加載等問價(jià)過大等待時(shí)間長(zhǎng)的優(yōu)化,當(dāng)你不同的入口文件都依賴了相同的第三方模塊這時(shí)候需要把他們抽離出來(lái)。這里主要應(yīng)用了entry的對(duì)象語(yǔ)法和CommonsChunkPlugin。實(shí)際應(yīng)用舉例:
1.分離業(yè)務(wù)模塊和公共模塊(webpack文件,第三方模塊,自定義公共模塊)
const path = require("path"); const webpack = require("webpack"); const packagejson = require("./package.json"); const config = { entry: { first: './src/first.js',//引入了common.j和vue.js second: './src/second.js',//引入了common.j和vue.js vendor: Object.keys(packagejson.dependencies)//獲取生產(chǎn)環(huán)境依賴庫(kù)的 //模塊名稱,返回一個(gè)數(shù)組,這里涉及的是單入口數(shù)組寫法將多個(gè)依賴合并到一個(gè)chunk中 //在這里vue作為第三方庫(kù)會(huì)被合并 }, output: { path: path.resolve(__dirname,'./dist'), filename: '[name].js' }, plugins: [ new webpack.optimize.CommonsChunkPlugin({ name: 'vendor',//指定已經(jīng)存在的chunk這里指向的是vendor, 公共部分模塊都會(huì)合并到這個(gè)chunk名對(duì)應(yīng)的文件,不指定默認(rèn)生成name為commons的chunk。 filename: '[name].js'//抽離出公共部分的文件名 }), ] } module.exports = config;
2.詳細(xì)分離業(yè)務(wù)模塊 第三方依賴 公共模塊 webpack運(yùn)行文件
plugins: [//這一步把webpack運(yùn)行文件抽離出來(lái) new webpack.optimize.CommonsChunkPlugin({//先抽離所用的公共模塊 name: 'vendor', filename: '[name].js' }), new webpack.optimize.CommonsChunkPlugin({//再指定vendor從中抽離webpack運(yùn)行文件 name: 'runtime', filename: '[name].js', chunks: ['vendor'] }), new webpack.optimize.CommonsChunkPlugin({ name: ['vendor','runtime'], filename: '[name].js', minChunks: Infinity//只有當(dāng)入口文件(entry chunks) >= 3 才生效, //用來(lái)在第三方庫(kù)中分離自定義的公共模塊 }), new webpack.optimize.CommonsChunkPlugin({ name: 'common', filename: '[name].js', minChunks:2,//默認(rèn)為2,意思是模塊被多少個(gè)chunk引用才被抽離 //由于common被 first 和second 引用 所以會(huì)被抽離 chunks: ['first','second']//從first.js和second.js中抽取commons chunk }), ]
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
本文題目:淺談webpack四個(gè)核心概念之Entry
轉(zhuǎn)載來(lái)于:http://biofuelwatch.net/article/ggcdej.html