摘要:解決方案一在一個(gè)項(xiàng)目中,使用配置多個(gè)文件來實(shí)現(xiàn)多頁面應(yīng)用存在的利弊配置簡(jiǎn)單打包效率低下靈活性差需要維護(hù)多個(gè)文件解決方案二采用使用統(tǒng)一維護(hù)每個(gè)項(xiàng)目的并為頭部注入用戶信息,并且多帶帶構(gòu)建一個(gè)項(xiàng)目,統(tǒng)一維護(hù)第三方依賴。
前提
數(shù)據(jù)管理平臺(tái)包含了多個(gè)后臺(tái)項(xiàng)目,后臺(tái)項(xiàng)目均使用vue作為開發(fā)框架。
子項(xiàng)目存在公共頭部,需要統(tǒng)一管理維護(hù)。
子項(xiàng)目存在公共的依賴(如vue、vuex、vue-router等),公共依賴包可以統(tǒng)一維護(hù)。
子項(xiàng)目存在公共存在公共的配置文件例如postcss.config.js需要統(tǒng)一維護(hù)。
解決方案一在一個(gè)項(xiàng)目中,使用entry配置多個(gè)html文件來實(shí)現(xiàn)多頁面應(yīng)用
存在的利弊:
配置簡(jiǎn)單
打包效率低下
靈活性差
需要維護(hù)多個(gè)html文件
解決方案二(采用)使用thinkjs統(tǒng)一維護(hù)每個(gè)項(xiàng)目的template.html,并為頭部注入用戶信息,并且多帶帶構(gòu)建一個(gè)common項(xiàng)目,統(tǒng)一維護(hù)第三方依賴。
存在的利弊:
配置繁瑣
打包效率高
靈活性好
只需維護(hù)一個(gè)html文件
項(xiàng)目目錄├─src │ ├─bootstrap │ ├─config │ ├─controller │ ├─logic │ └─model ├─view │ └─index //模板文件目錄 └─vue_project |—package.json //統(tǒng)一維護(hù)所有依賴 ├─asset_manage //子項(xiàng)目目錄 ├─common //打包公共組件項(xiàng)目 ├─postcss.config.js //公用的配置文件配置介紹 common配置介紹
打包主要配置介紹:
插件 | 描述 |
---|---|
webpack.DllPlugin | 將vendor依賴中的庫、文件打包(依賴的庫取的是package.dependencies的值) |
extract-text-webpack-plugin | 將css多帶帶提取出來,打包成一個(gè).css文件 |
assets-webpack-plugin | 將webpack.DllPlugin打包生成的文件的文件名保存為一個(gè).json文件。方便子項(xiàng)目引用。 |
optimize-css-assets-webpack-plugin | 壓縮打包后的.css文件 |
module.exports = { mode: "production", entry: { vendor: [...Object.keys(package.dependencies), "./css/element-css/index.css", "./css/index.postcss"], }, devtool: "source-map", output: { path: path.join(__dirname, "../vendor"), filename: "dll.[name]_[hash:6].js", library: "[name]_[hash:6]" }, module: { rules: [{ test: /.css$/, use: ExtractTextPlugin.extract({ fallback: "style-loader", use: "css-loader" }) }, { test: /.postcss$/, use: ExtractTextPlugin.extract({ fallback: "style-loader", use: [{ loader: "css-loader", options: { importLoaders: 1 } }, "postcss-loader", ] }) }, { test: /.(woff2?|eot|ttf|otf)(?.*)?$/, use: "url-loader" }, ] }, plugins: [ new webpack.DllPlugin({ path: path.join(__dirname, "../vendor", "[name]-manifest.json"), name: "[name]_[hash:6]", context: path.join(__dirname, "../../"), // 執(zhí)行的上下文環(huán)境,對(duì)之后DllReferencePlugin有用 }), new ExtractTextPlugin("[name]_[hash:6].css"), new AssetsPlugin({ filename: "bundle-config.json", path: path.join(__dirname, "../vendor") }), new OptimizeCssAssetsPlugin({ assetNameRegExp: /.css$/g, cssProcessor: require("cssnano"), cssProcessorOptions: { parser: require("postcss-safe-parser"), discardComments: { removeAll: true }, }, canPrint: true }) ] }vue-cli3配置介紹
vue-cli3的配置文件被封裝在了npm模塊@vue/cli-service 中可使用vue inspect > output.js進(jìn)行查看
插件 | 描述 |
---|---|
webpack.DllReferencePlugin | 將第三方依賴的索引id與對(duì)應(yīng)的第三方依賴具體位置告知webpack |
add-asset-html-webpack-plugin | 將common中生成的bundle-config.json文件中的依賴文件注入html-webpack-plugin的模板中 |
const webpackConfig = { configureWebpack: { plugins: [ new webpack.DllReferencePlugin({ context: path.join(__dirname, "../../"), manifest }), new AddAssetHtmlPlugin([{ filepath: require.resolve(`../vendor/${bundleConfig.vendor.js}`), includeSourcemap: false }, { typeOfAsset: "css", filepath: require.resolve(`../vendor/${bundleConfig.vendor.css}`), includeSourcemap: false } ]) ] }, chainWebpack: config => { config.resolve.alias.store.delete("vue$"); config.plugin("copy").tap(args => { args[0][0].from = "./public"; args[0][0].to = "public"; args[0][0].ignore = [".*"]; return args; }); config.plugin("define").tap(args => { args[0]["process.env"]["BUILD_ENV"] = """ + process.env.BUILD_ENV + """; return args; }); config.module.rule("postcss").oneOf("vue").use("postcss").loader("postcss-loader").options({ config: { path: path.join(__dirname, "../../") } }); }, }依賴統(tǒng)一管理
如果各自項(xiàng)目的打包依賴分布在各自項(xiàng)目中,依然會(huì)增加維護(hù)成本以及依賴安裝的打包成本
這里就需要理解node查找依賴的邏輯。通過module.paths可以看到node查找依賴時(shí)的,順序
[ "E:datamanagementvue_projectasset_manage epl ode_modules", "E:datamanagementvue_projectasset_manage ode_modules", "E:datamanagementvue_project ode_modules", "E:datamanagement ode_modules", "E: ode_modules", "C:Users18044854.node_modules", "C:Users18044854.node_libraries", "C:Program Files odejslib ode" ]
node會(huì)從當(dāng)前目錄的node_modules一級(jí)一級(jí)的向上查找,
所以我們只需要將所有依賴安裝在common和vue的父級(jí)目錄即可
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/97695.html
摘要:而測(cè)試驅(qū)動(dòng)開發(fā)技術(shù)并不只是單純的測(cè)試工作。需求向來就是軟件開發(fā)過程中感覺最不好明確描述易變的東西。這里說的需求不只是指用戶的需求,還包括對(duì)代碼 可能很多人和我一樣, 首次聽到前端架構(gòu)這個(gè)詞, 第一反應(yīng)是: 前端還有架構(gòu)這一說呢? 在后端開發(fā)領(lǐng)域, 系統(tǒng)規(guī)劃和可擴(kuò)展性非常關(guān)鍵, 因此架構(gòu)師備受重視, 早在開發(fā)工作啟動(dòng)之前, 他們就被邀請(qǐng)加入到項(xiàng)目中, 而且他們會(huì)跟客戶討論即將建成的平臺(tái)的...
摘要:而測(cè)試驅(qū)動(dòng)開發(fā)技術(shù)并不只是單純的測(cè)試工作。需求向來就是軟件開發(fā)過程中感覺最不好明確描述易變的東西。這里說的需求不只是指用戶的需求,還包括對(duì)代碼 可能很多人和我一樣, 首次聽到前端架構(gòu)這個(gè)詞, 第一反應(yīng)是: 前端還有架構(gòu)這一說呢? 在后端開發(fā)領(lǐng)域, 系統(tǒng)規(guī)劃和可擴(kuò)展性非常關(guān)鍵, 因此架構(gòu)師備受重視, 早在開發(fā)工作啟動(dòng)之前, 他們就被邀請(qǐng)加入到項(xiàng)目中, 而且他們會(huì)跟客戶討論即將建成的平臺(tái)的...
摘要:現(xiàn)在開始從頭搭建我們的微前端架構(gòu)。項(xiàng)目源碼微前端項(xiàng)目微前端微前端項(xiàng)目 1. 微前端 ????????基于spa類的單頁應(yīng)用,隨著企業(yè)工程項(xiàng)目的體積越來越大,開發(fā)的功能越來越多,頁面也越來越多,項(xiàng)目隨之也變得越來越臃腫,維護(hù)起來十分困難,往往改一個(gè)logo,或者改一個(gè)小樣式,都要將項(xiàng)目全部重新打包一遍,維護(hù)困難,部署也困難。 ????????因此前端在借鑒后端的微服務(wù)架構(gòu)模式后,衍生了...
摘要:本文首發(fā)于的技術(shù)博客實(shí)用至上,非經(jīng)作者同意,請(qǐng)勿轉(zhuǎn)載。原文地址如果您對(duì)本系列文章感興趣,歡迎關(guān)注訂閱這里這系列文章講什么本系列文章主要介紹如何用這一當(dāng)前流行的構(gòu)建工具來設(shè)計(jì)一個(gè)多頁應(yīng)用的架構(gòu)。 本文首發(fā)于Array_Huang的技術(shù)博客——實(shí)用至上,非經(jīng)作者同意,請(qǐng)勿轉(zhuǎn)載。原文地址:https://segmentfault.com/a/1190000006843916如果您對(duì)本系列文章...
摘要:回到純靜態(tài)頁面開發(fā)階段,讓頁面不需要后端渲染也能跑起來。改造開始本文著重介紹如何將靜態(tài)頁面改造成后端渲染需要的模板。總結(jié)在后端渲染的項(xiàng)目里使用多頁應(yīng)用架構(gòu)是絕對(duì)可行的,可不要給老頑固們嚇唬得又回到傳統(tǒng)前端架構(gòu)了。 本文首發(fā)于Array_Huang的技術(shù)博客——實(shí)用至上,非經(jīng)作者同意,請(qǐng)勿轉(zhuǎn)載。原文地址:https://segmentfault.com/a/119000000820338...
閱讀 1438·2021-09-28 09:44
閱讀 2501·2021-09-28 09:36
閱讀 1144·2021-09-08 09:35
閱讀 1982·2019-08-29 13:50
閱讀 810·2019-08-29 13:29
閱讀 1130·2019-08-29 13:15
閱讀 1724·2019-08-29 13:00
閱讀 2988·2019-08-26 16:16