阅读 1251

webpack独立打包多入口的项目

前提

如果我们在开发系统A时,能够按模块划分生成多份静态资源包,最终的成果物中,会有多个子目录,每个子目录可独立运行,完成一个业务功能。这样的话,我们有任何系统需要我们开发过的任何模块,都可以直接打包指定的模块,灵活组装。

优点:

  • 1、可与其他系统灵活组装
  • 2、各个模块相互不受影响,所以不受框架和开发模式的制约
  • 3、不同模块可以分开部署
  • 4、后期维护风险小,可以持续的、稳定的进行维护

缺点:

  • 1、各个模块有相互独立的资源包,那么如果有相同的资源引用,不能复用
  • 2、模块的组装要依赖iframe,所以要对浏览器安全设置、cookie共享等问题进行单独处理
  • 3、用iframe来包裹组件,组件所能控制到的范围就是其所在的iframe,当涉及到全屏的应用场景时,会比较麻烦
  • 4、不同组件之间的通信比较麻烦

实现目标

vue-cli默认打包方式的成果物:

修改配置后生成的成果物结构:

思路

由于我们现在的项目是多模块的,每个模块都应该有独立的入口,所以我们修改src目录结构如下:

注意:原来的src下的main.js、index.html和app.vue已经没用了,可以删掉

然后模块内的目录结构如下图所示:

注意:

  • 这里跟原来的src下的main.js、index.html和app.vue一样的,只不过我们把main.js改成了index.js而已。
  • 至于模块内要使用路由、状态管理都可以根据自己的需求去配置了。

以下是修改webpack配置的详细步骤

  • 第一步:增加build/module-conf.js用来处理获取模块目录等问题
  • 第二步:增加build/build-all.js用来处理循环执行打包命令
  • 第三步:修改build/build.js增加MODULE_ENV参数,用来记录当前打包的模块名称,增加MODE_ENV参数,用来记录当前打包的模式
  • 第四步:修改config/index.js的配置,修改打包时的出口目录配置、html入口模板的配置以及静态资源路径配置
  • 第五步:修改webpack.base.conf.js的入口配置,根据传参,动态配置入口文件
  • 第六步:修改webpack.dev.conf.js的配置,增加多入口时webpackHtmlPlugin插件的配置,增加静态资源服务器的配置
  • 第七步:修改webpack.prod.conf.js的配置,增加对不同打包模式的处理。
  • 第八步:修改package.json,增加npm run build-all指令

构建指令

  • 打包全部模块到一个资源包下面,每个模块的入口是module.html文件,静态资源都在static目录中,这种方式可以复用重复的资源
npm run build
复制代码
  • 打包指定模块到一个资源包下面,每个模块的入口是module.html文件,静态资源都在static目录中,这种方式可以复用重复的资源
npm run build moduleName1,moduleName2,...
复制代码
  • 打包所有模块,然后每个模块彼此独立,有几个模块,就产生几个静态资源包,这种方式不会复用重复的资源
npm run build-all 
复制代码
文章分类
阅读
文章标签