摘要:如果采用導出一個來描述所需配置的方法需要寫兩個文件。再在啟動時通過指定使用哪個配置文件。例如啟動命令是時,則的值是。采用描述的一份配置采用函數(shù)描述的一份配置采用異步函數(shù)描述的一份配置以上配置會導致針對這三份配置執(zhí)行三次不同的構(gòu)建。
除了通過導出一個Object來描述webpack所需要的配置,還有其他更靈活的方式,以簡化不同場景的配置。下面來一一介紹它們。
1. 導出一個Function在大多數(shù)時候可能需要從同一份源代碼中構(gòu)建出多份代碼,例如一份用于開發(fā)時,一份用于發(fā)布到線上。
如果采用導出一個Object來描述webpack所需配置的方法需要寫兩個文件。一個用于開發(fā)環(huán)境,一個用于線上環(huán)境。再在啟動時通過webpack --config webpack.config.js指定使用哪個配置文件。
采用導出一個Function的方式,能通過JavaScript靈活的控制配置,做到只用寫一個配置文件就能完成以上要求。
const path = require("path") const UglifyJsPlugin = require("webpack/lib/optimize/UglifyJsPlugin") module.exports = function(env={}, argv) { const plugins = [] const isProducton = env["production"] // 在生成環(huán)境才壓縮 if (isProduction) { plugins.push( // 壓縮輸出的 JS 代碼 new UglifyJsPlugin() ) return { plugins: plugins, // 在生成環(huán)境不輸出 Source Map devtool: isProduction ? undefined : "source-map", }; }
在運行webpack時,會給這個函數(shù)傳入2個參數(shù),分別是:
1. env: 當前運行時的webpack專屬環(huán)境變量, env是一個object。讀取時直接訪問Object屬性,設(shè)置它需要在啟動webpack時帶上參數(shù)。例如啟動命令是 webpack --env.production --env.bao=foo時,則 env 的值是 {"production":"true","bao":"foo"}。 2.argv:代表在啟動webpack時所有通過命令行傳入的參數(shù),例如:--config、 --env、 --devtool,可以通過webpack -h列出所有webpack支持的命令行參數(shù)。
就以上配置文件而言,在開發(fā)時執(zhí)行命令webpack構(gòu)建出方便調(diào)試的代碼,在需要構(gòu)建發(fā)布到線上的代碼時執(zhí)行webpack --env.production構(gòu)建出壓縮代碼。
2. 導出一個返回promise的函數(shù)有些情況下你不能以同步的方式返回一個描述配置的object,webpack還支持導出一個返回promise的函數(shù),使用如下:
module.exports = function(env = {}, argv) { return new Promise((resolve, reject) => { setTimeout(() => { resolve({ // ... }) }, 5000) }) }3. 導出多份配置
除了只導出一份配置外,webpack還支持導出一個數(shù)組,數(shù)組中可以包含每份配置,并且每份配置都會執(zhí)行一遍構(gòu)建。
module.exports = [ // 采用 Object 描述的一份配置 { // ... }, // 采用函數(shù)描述的一份配置 function() { return { // ... } }, // 采用異步函數(shù)描述的一份配置 function() { return Promise(); } ]
以上配置會導致 Webpack 針對這三份配置執(zhí)行三次不同的構(gòu)建。
這特別適合于用 Webpack 構(gòu)建一個要上傳到 Npm 倉庫的庫,因為庫中可能需要包含多種模塊化格式的代碼,例如 CommonJS、UMD。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/93205.html
摘要:把他設(shè)置為以在其他之前或之后進行處理。基于布爾值的字段可用于進一步進行約束不匹配給定條件參見表示接受的值。同時匹配一系列條件。將此添加到你的配置即可檢查其中的數(shù)據(jù)流,而不必在中插入。 原文鏈接:https://survivejs.com/webpack...翻譯計劃:https://segmentfault.com/a/11...附言:因為發(fā)現(xiàn)書中一些內(nèi)容單獨放出來會比較尷尬,所以會跳...
摘要:資源哈希編碼使用可以為每個包的名稱注入一個哈希值例如,,以便在版本更新后使客戶端上舊版本的包無效重新下載。如此受人喜愛的原因之一是熱模塊更換??梢詾槲募晒V?,在內(nèi)容更改時,可以作廢瀏覽器緩存中上個版本的包。 原文鏈接:https://survivejs.com/webpack...翻譯計劃:https://segmentfault.com/a/11... 涉及到的未翻譯單詞 ...
摘要:它將根據(jù)模塊的依賴關(guān)系進行靜態(tài)分析,然后將這些模塊按照指定的規(guī)則生成對應的靜態(tài)資源??梢詫⒍喾N靜態(tài)資源轉(zhuǎn)換成一個靜態(tài)文件,減少了頁面的請求。因此我們不再按文件文件的方式運行指令,而是直接運行這樣便能實現(xiàn)打包。 一、什么是webpack 是一個前端資源加載/打包工具。它將根據(jù)模塊的依賴關(guān)系進行靜態(tài)分析,然后將這些模塊按照指定的規(guī)則生成對應的靜態(tài)資源。它做的事情是,分析你的項目結(jié)構(gòu),找到J...
摘要:在他的重學前端課程中提到到現(xiàn)在為止,前端工程師已經(jīng)成為研發(fā)體系中的重要崗位之一。大部分前端工程師的知識,其實都是來自于實踐和工作中零散的學習。一基礎(chǔ)前端工程師吃飯的家伙,深度廣度一樣都不能差。 開篇 前端開發(fā)是一個非常特殊的行業(yè),它的歷史實際上不是很長,但是知識之繁雜,技術(shù)迭代速度之快是其他技術(shù)所不能比擬的。 winter在他的《重學前端》課程中提到: 到現(xiàn)在為止,前端工程師已經(jīng)成為研...
閱讀 1389·2023-04-25 15:21
閱讀 2703·2021-11-24 10:23
閱讀 3432·2021-10-11 10:59
閱讀 3287·2021-09-03 10:28
閱讀 1759·2019-08-26 13:45
閱讀 2352·2019-08-26 12:11
閱讀 947·2019-08-26 12:00
閱讀 1744·2019-08-26 10:44