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

資訊專欄INFORMATION COLUMN

多頁面應用的前端架構

eternalshallow / 3094人閱讀

摘要:解決方案一在一個項目中,使用配置多個文件來實現多頁面應用存在的利弊配置簡單打包效率低下靈活性差需要維護多個文件解決方案二采用使用統一維護每個項目的并為頭部注入用戶信息,并且多帶帶構建一個項目,統一維護第三方依賴。

前提

數據管理平臺包含了多個后臺項目,后臺項目均使用vue作為開發框架。

子項目存在公共頭部,需要統一管理維護。

子項目存在公共的依賴(如vuevuexvue-router等),公共依賴包可以統一維護。

子項目存在公共存在公共的配置文件例如postcss.config.js需要統一維護。

解決方案一
在一個項目中,使用entry配置多個html文件來實現多頁面應用

存在的利弊:

配置簡單

打包效率低下

靈活性差

需要維護多個html文件

解決方案二(采用)
使用thinkjs統一維護每個項目的template.html,并為頭部注入用戶信息,并且多帶帶構建一個common項目,統一維護第三方依賴。

存在的利弊:

配置繁瑣

打包效率高

靈活性好

只需維護一個html文件

項目目錄
├─src
│  ├─bootstrap
│  ├─config
│  ├─controller
│  ├─logic
│  └─model
├─view
│  └─index                            //模板文件目錄
└─vue_project                                
    |—package.json                    //統一維護所有依賴
    ├─asset_manage                    //子項目目錄
    ├─common                        //打包公共組件項目
    ├─postcss.config.js             //公用的配置文件
配置介紹 common配置介紹

打包主要配置介紹:

插件 描述
webpack.DllPlugin vendor依賴中的庫、文件打包(依賴的庫取的是package.dependencies的值)
extract-text-webpack-plugin css多帶帶提取出來,打包成一個.css文件
assets-webpack-plugin webpack.DllPlugin打包生成的文件的文件名保存為一個.json文件。方便子項目引用。
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, "../../"), // 執行的上下文環境,對之后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進行查看
插件 描述
webpack.DllReferencePlugin 將第三方依賴的索引id與對應的第三方依賴具體位置告知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, "../../")
            }
        });
    },
}
依賴統一管理
如果各自項目的打包依賴分布在各自項目中,依然會增加維護成本以及依賴安裝的打包成本

這里就需要理解node查找依賴的邏輯。通過module.paths可以看到node查找依賴時的,順序

[ "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會從當前目錄的node_modules一級一級的向上查找,
所以我們只需要將所有依賴安裝在common和vue的父級目錄即可

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/97695.html

相關文章

  • 前端進階之路: 前端架構設計(3) - 測試核心

    摘要:而測試驅動開發技術并不只是單純的測試工作。需求向來就是軟件開發過程中感覺最不好明確描述易變的東西。這里說的需求不只是指用戶的需求,還包括對代碼 可能很多人和我一樣, 首次聽到前端架構這個詞, 第一反應是: 前端還有架構這一說呢? 在后端開發領域, 系統規劃和可擴展性非常關鍵, 因此架構師備受重視, 早在開發工作啟動之前, 他們就被邀請加入到項目中, 而且他們會跟客戶討論即將建成的平臺的...

    Karuru 評論0 收藏0
  • 前端進階之路: 前端架構設計(3) - 測試核心

    摘要:而測試驅動開發技術并不只是單純的測試工作。需求向來就是軟件開發過程中感覺最不好明確描述易變的東西。這里說的需求不只是指用戶的需求,還包括對代碼 可能很多人和我一樣, 首次聽到前端架構這個詞, 第一反應是: 前端還有架構這一說呢? 在后端開發領域, 系統規劃和可擴展性非常關鍵, 因此架構師備受重視, 早在開發工作啟動之前, 他們就被邀請加入到項目中, 而且他們會跟客戶討論即將建成的平臺的...

    宋華 評論0 收藏0
  • 前端 —— 理論篇

    摘要:現在開始從頭搭建我們的微前端架構。項目源碼微前端項目微前端微前端項目 1. 微前端 ????????基于spa類的單頁應用,隨著企業工程項目的體積越來越大,開發的功能越來越多,頁面也越來越多,項目隨之也變得越來越臃腫,維護起來十分困難,往往改一個logo,或者改一個小樣式,都要將項目全部重新打包一遍,維護困難,部署也困難。 ????????因此前端在借鑒后端的微服務架構模式后,衍生了...

    wangbinke 評論0 收藏0
  • webpack應用架構系列(一):一步一步解決架構痛點

    摘要:本文首發于的技術博客實用至上,非經作者同意,請勿轉載。原文地址如果您對本系列文章感興趣,歡迎關注訂閱這里這系列文章講什么本系列文章主要介紹如何用這一當前流行的構建工具來設計一個多頁應用的架構。 本文首發于Array_Huang的技術博客——實用至上,非經作者同意,請勿轉載。原文地址:https://segmentfault.com/a/1190000006843916如果您對本系列文章...

    Lowky 評論0 收藏0
  • webpack應用架構系列(十五):論前端如何在后端渲染開發模式下夾縫生存

    摘要:回到純靜態頁面開發階段,讓頁面不需要后端渲染也能跑起來。改造開始本文著重介紹如何將靜態頁面改造成后端渲染需要的模板。總結在后端渲染的項目里使用多頁應用架構是絕對可行的,可不要給老頑固們嚇唬得又回到傳統前端架構了。 本文首發于Array_Huang的技術博客——實用至上,非經作者同意,請勿轉載。原文地址:https://segmentfault.com/a/119000000820338...

    dinfer 評論0 收藏0

發表評論

0條評論

eternalshallow

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<