摘要:解决方案一在一个项目中,使用配置多个文件来实现多页面应用存在的利弊配置简单打包效率低下灵活性差需要维护多个文件解决方案二采用使用统一维护每个项目的并为头部注入用户信息,并且多带带构建一个项目,统一维护第三方依赖。
前提
数据管理平台包含了多个后台项目,后台项目均使用vue作为开发框架。
子项目存在公共头部,需要统一管理维护。
子项目存在公共的依赖(如vue、vuex、vue-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的父级目录即可
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/97695.html
摘要:而测试驱动开发技术并不只是单纯的测试工作。需求向来就是软件开发过程中感觉最不好明确描述易变的东西。这里说的需求不只是指用户的需求,还包括对代码 可能很多人和我一样, 首次听到前端架构这个词, 第一反应是: 前端还有架构这一说呢? 在后端开发领域, 系统规划和可扩展性非常关键, 因此架构师备受重视, 早在开发工作启动之前, 他们就被邀请加入到项目中, 而且他们会跟客户讨论即将建成的平台的...
摘要:而测试驱动开发技术并不只是单纯的测试工作。需求向来就是软件开发过程中感觉最不好明确描述易变的东西。这里说的需求不只是指用户的需求,还包括对代码 可能很多人和我一样, 首次听到前端架构这个词, 第一反应是: 前端还有架构这一说呢? 在后端开发领域, 系统规划和可扩展性非常关键, 因此架构师备受重视, 早在开发工作启动之前, 他们就被邀请加入到项目中, 而且他们会跟客户讨论即将建成的平台的...
摘要:现在开始从头搭建我们的微前端架构。项目源码微前端项目微前端微前端项目 1. 微前端 基于spa类的单页应用,随着企业工程项目的体积越来越大,开发的功能越来越多,页面也越来越多,项目随之也变得越来越臃肿,维护起来十分困难,往往改一个logo,或者改一个小样式,都要将项目全部重新打包一遍,维护困难,部署也困难。 因此前端在借鉴后端的微服务架构模式后,衍生了...
摘要:本文首发于的技术博客实用至上,非经作者同意,请勿转载。原文地址如果您对本系列文章感兴趣,欢迎关注订阅这里这系列文章讲什么本系列文章主要介绍如何用这一当前流行的构建工具来设计一个多页应用的架构。 本文首发于Array_Huang的技术博客——实用至上,非经作者同意,请勿转载。原文地址:https://segmentfault.com/a/1190000006843916如果您对本系列文章...
摘要:回到纯静态页面开发阶段,让页面不需要后端渲染也能跑起来。改造开始本文着重介绍如何将静态页面改造成后端渲染需要的模板。总结在后端渲染的项目里使用多页应用架构是绝对可行的,可不要给老顽固们吓唬得又回到传统前端架构了。 本文首发于Array_Huang的技术博客——实用至上,非经作者同意,请勿转载。原文地址: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