......一、背景随着项目的复杂化和功能的增加,一个项目下可能会有多个项目。这时候如果我们单独打开项目进行开发,项目代码就会冗余。后期的维护成本也很高,而且代码的冗余会导致静态资源包加载和执行的时间变长,直接影响性能和体验。为了解决这个问题,我们需要实现多项目分模块打包,项目之间共享组件和依赖,运行和打包时互不干扰。2.应用场景以后台管理系统为例。我们还有运营管理制度、业务管理制度、设备管理制度和一些内部管理制度。这些系统的菜单管理、权限管理、用户管理都是一样的。业务模块较多,业务组件和UI组件必须遵循公司规范。在这种情况下,您可以使用存储库来管理这些系统。所有设计文档、源代码和文件都放在一个insiderepo中。3.技术方案本文基于vue-cli3,核心是vue.config.js文件。vue-cli2的实现方法类似,核心是webpack.config.js文件,这里不再赘述。1.功能项目区分命令项目配置路由模块管理项目生成脚本2.技术要点process.argv[1]:获取命令行参数cross-env[2]:设置环境fs-extra[3]:命令行生成项目chalk[4]:命令行美化Inquirer[5]:命令行交互node-progress[6]:加载进度条3.思路我们知道在package.json中有项目启动和打包的命令。我们可以从这里开始。我们的思路大致是这样的:通过命令行输入项目名对指定项目进行打包,处理命令行参数;配置公共文件和项目配置文件;设置当前运行/打包项目(project.js);打包项目所需的模块和Resources;npmrundevprojectA#在开发环境中运行projectA项目npmrunbuild:devprojectA#在开发环境中打包projectA项目npmrunbuildprojectA#打包projectA项目4.目录结构.├──README.md├───babel.config.js├──config#配置项│├──build.js#打包配置文件│├──copy.js#项目生成文件│├──dev.js#开发配置文件│├──project.js#获取项目信息│└──projectConfig.js#项目配置文件(与常用脚手架配置项相同)├──package.json#项目依赖├──postcss.config.js#postcss配置文件├──project#项目信息配置│├──index.js│├──module#公共路由模块│└──projects#公共项目信息├──public│└──index.html├──src│├──assets#公共资源文件││└──logo.png│├──components#公共组件││├──404.vue││└──main.vue│└──projects#project目录(独立路由状态管理接口请求)│├──projectA│├──projectB│└──projectC├──temp#项目模板文件(可根据项目需求定制)│├──App.vue│├──components│├──main.js│├──page││└──home.vue│├──router.js│└──store.js├──vue.config.js#核心配置文件└──yarn.lock13个目录,26个文件好了,我们的视图目录结构大概就是上面的样子看起来,我们期望的是像打包一个完整的工程一样,把这个A工程打包到src目录下,那么这部分怎么实现呢?5.流程图6项目配置1)修改package.json配置这里不得不提到cross-env模块,我们之前在生产、沙盒、测试、开发环境中也用到了。npmi--save-devcross-envcode:"scripts":{"serve":"vue-cli-serviceserve","build":"vue-cli-servicebuild","lint":"vue-cli-servicelint","dev":"cross-envNODE_ENV=developmentnodeconfig/dev.js","test":"cross-envNODE_ENV=testnodeconfig/dev.js","pre":"交叉-envNODE_ENV=预览节点配置/dev.js","prd":"cross-envNODE_ENV=productionnodeconfig/dev.js","build:dev":"cross-envNODE_ENV=developmentnodeconfig/build.js","build:test":"cross-envNODE_ENV=testnodeconfig/build.js","build:pre":"cross-envNODE_ENV=previewnodeconfig/build.js","build:prd":"cross-envNODE_ENV=productionnodeconfig/build.js","copy":"nodeconfig/copy.js"}2)编写项目代码本版本为简单demo,配置好运行命令并打包后命令我们在项目中编写业务代码。路径:src/projects/projectA/App.vue