摘要:同時(shí),我們可以在源代碼目錄里面,根據(jù)需求對(duì)代碼進(jìn)行模塊化管理,構(gòu)建出來(lái)的代碼結(jié)構(gòu)會(huì)和我們?cè)创a中管理的一致。這樣一來(lái),既可以享受構(gòu)建系統(tǒng)的優(yōu)勢(shì),又無(wú)需在新增或修改模塊時(shí)改動(dòng),是不是很方便呢
假定我們的項(xiàng)目目錄為如下的樣子:
- root/ - assets/ - app/ - global.js - index/ - index.js - auth/ - login.js - register.js - ... - webpack.config.js - public/ - assets/ - build/
使用如下的 webpack 配置:
var webpack = require("webpack"); var fs = require("fs"); var path = require("path"); var glob = require("glob"); const debug = process.env.NODE_ENV !== "production"; function entries (globPath) { var files = glob.sync(globPath); var entries = {}, entry, dirname, basename; for (var i = 0; i < files.length; i++) { entry = files[i]; dirname = path.dirname(entry); basename = path.basename(entry, ".js"); entries[path.join(dirname, basename)] = "./" + entry; } return entries; } module.exports = { entry: entries("app/**/*.js"), output: { path: path.join(__dirname, "..", "public", "assets", "build"), publicPath: "/assets/build/", filename: "[name]" + (debug ? "" : "-[chunkhash]") + ".js", chunkFilename: "[id]" + (debug ? "" : "-[chunkhash]") + ".js" }, plugins: [ function () { this.plugin("done", function (stats) { stats = stats.compilation.getStats().toJson({ hash: true, publicPath: true, assets: true, chunks: false, modules: false, source: false, errorDetails: false, timings: false }); var json = {}, chunk; for (var key in stats.assetsByChunkName) { if (stats.assetsByChunkName.hasOwnProperty(key)) { chunk = stats.assetsByChunkName[key]; json[key + ".js"] = chunk[0]; } } fs.writeFileSync( path.join(__dirname, "..", "public", "assets", "build", "rev-manifest.json"), JSON.stringify(json, null, 2) ); }); } ] };
這樣,我們就可以得到形如這樣的構(gòu)建輸出:
- root/ - assets/ - ... - public/ - assets/ - build/ - rev-manifest.json - app/ - global.js - auth/ - login.js - register.js - ...
意義何在???
關(guān)鍵在于 rev-manifest.json 文件,我們查看一下文件內(nèi)容:
{ "app/global.js": "app/global.js", "app/index/index.js": "app/index/index.js", "app/auth/login.js": "app/auth/login.js", "app/auth/register.js": "app/auth/register.js", }
意義何在???
好吧,我們?cè)倏匆幌略谏a(chǎn)環(huán)境下的構(gòu)建輸出:
{ "app/global.js": "app/global-6ff91e44b26765ae797a.js", "app/index/index.js": "app/index/index-d294c62e36a91fa7237d.js", "app/auth/login.js": "app/auth/login-f04b1d5a3cffac4d70aa.js", "app/auth/register.js": "app/auth/register-502d794e8e0c7f1a230d.js", }
如果配合模板中的函數(shù):
Title
assets_url 函數(shù)可以直接獲取 rev-manifest.json 內(nèi)容,根據(jù)給定的 key 得到對(duì)應(yīng)的構(gòu)建文件的可訪問(wèn)路徑,自動(dòng)的根據(jù)不同的環(huán)境獲取到正確的引用結(jié)果。
同時(shí),我們可以在源代碼目錄里面,根據(jù)需求對(duì)代碼進(jìn)行模塊化管理,構(gòu)建出來(lái)的代碼結(jié)構(gòu)會(huì)和我們?cè)创a中管理的一致。
這樣一來(lái),既可以享受構(gòu)建系統(tǒng)的優(yōu)勢(shì),又無(wú)需在新增或修改模塊時(shí)改動(dòng) webpack.config.js,是不是很方便呢?
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/78543.html
摘要:但是,隨者工程開(kāi)發(fā)的復(fù)雜程度和代碼規(guī)模不斷地增加,暴露出來(lái)的各種性能問(wèn)題也愈發(fā)明顯,極大的影響著開(kāi)發(fā)過(guò)程中的體驗(yàn)。對(duì)應(yīng)的資源也可以直接由頁(yè)面外鏈載入,有效地減小了資源包的體積。 背景 如今前端工程化的概念早已經(jīng)深入人心,選擇一款合適的編譯和資源管理工具已經(jīng)成為了所有前端工程中的標(biāo)配,而在諸多的構(gòu)建工具中,webpack以其豐富的功能和靈活的配置而深受業(yè)內(nèi)吹捧,逐步取代了grunt和gu...
webpack 是什么 showImg(https://segmentfault.com/img/bVzLhA?w=2598&h=1299); 一項(xiàng)技術(shù)、一個(gè)工具的出現(xiàn),肯定是為了解決問(wèn)題的。那么,webpack 是為了解決什么問(wèn)題?答案是:文件依賴管理。瀏覽器端的 Js, 出于安全的考慮,對(duì)本地文件沒(méi)有操作權(quán)限,不能引用其它 js, css 等文件。而 webpack 就是用來(lái)解決這個(gè)問(wèn)題的,讓...
摘要:同時(shí)不能直接單純的指定輸出的文件名稱,比如,將會(huì)報(bào)錯(cuò),可以換成以下方式指定,或者其他類似方式。如果打包過(guò)程出現(xiàn)錯(cuò)誤,比如語(yǔ)法錯(cuò)誤,將會(huì)在控制臺(tái)以紅色文字顯示,并且在你修復(fù)之后會(huì)再次打包。 0x001 概述 其實(shí)我不知道怎么寫(xiě),所以決定就一塊一塊的寫(xiě)點(diǎn)平常配置的過(guò)程,根據(jù)不同東西稍微分區(qū)一下就好了 0x002 初始化項(xiàng)目結(jié)構(gòu) $ mkdir webpack_study $ cd webp...
摘要:了解相關(guān)什么是是一個(gè)模塊打包器。配置文件默認(rèn)是一個(gè)模塊,返回一個(gè)格式的配置信息對(duì)象插件插件件可以完成一些不能完成的功能。插件的使用一般是在的配置信息選項(xiàng)中指定。 了解Webpack相關(guān) 什么是webpack Webpack是一個(gè)模塊打包器(bundler)。 在Webpack看來(lái), 前端的所有資源文件(js/css/img/less/...)都會(huì)作為模塊處理 它將根據(jù)模塊的依...
摘要:了解相關(guān)什么是是一個(gè)模塊打包器。配置文件默認(rèn)是一個(gè)模塊,返回一個(gè)格式的配置信息對(duì)象插件插件件可以完成一些不能完成的功能。插件的使用一般是在的配置信息選項(xiàng)中指定。 了解Webpack相關(guān) 什么是webpack Webpack是一個(gè)模塊打包器(bundler)。 在Webpack看來(lái), 前端的所有資源文件(js/css/img/less/...)都會(huì)作為模塊處理 它將根據(jù)模塊的依...
閱讀 2278·2023-04-25 23:15
閱讀 1943·2021-11-22 09:34
閱讀 1564·2021-11-15 11:39
閱讀 972·2021-11-15 11:37
閱讀 2166·2021-10-14 09:43
閱讀 3506·2021-09-27 13:59
閱讀 1517·2019-08-30 15:43
閱讀 3480·2019-08-30 15:43