国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

多頁面應(yīng)用的前端架構(gòu)

eternalshallow / 3086人閱讀

摘要:解決方案一在一個(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)目存在公共的依賴(如vuevuexvue-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

相關(guān)文章

  • 前端進(jìn)階之路: 前端架構(gòu)設(shè)計(jì)(3) - 測(cè)試核心

    摘要:而測(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)的...

    Karuru 評(píng)論0 收藏0
  • 前端進(jìn)階之路: 前端架構(gòu)設(shè)計(jì)(3) - 測(cè)試核心

    摘要:而測(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)的...

    宋華 評(píng)論0 收藏0
  • 前端 —— 理論篇

    摘要:現(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)模式后,衍生了...

    wangbinke 評(píng)論0 收藏0
  • webpack應(yīng)用架構(gòu)系列(一):一步一步解決架構(gòu)痛點(diǎn)

    摘要:本文首發(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ì)本系列文章...

    Lowky 評(píng)論0 收藏0
  • webpack應(yīng)用架構(gòu)系列(十五):論前端如何在后端渲染開發(fā)模式下夾縫生存

    摘要:回到純靜態(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...

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

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

0條評(píng)論

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