likes
comments
collection
share

Angular 多项目管理

作者站长头像
站长
· 阅读数 46

今天,我们谈谈,怎么使用 Angular 来管理多个项目呢?

在平常的开发中,我们一个项目建立一个仓库,不仅维护起来难,而且那个"无穷大"node_modules 也太尴尬了吧,多个项目多份 node_modules,要是同类型的项目,使用同份 node_modules 就好了 🥺

Demo 测试环境:

  • MacBook Air (M1, 2020)
  • Visual Studio Code - 版本: 1.83.1 (Universal)
  • http-server - ^14.1.1

初始项目

我们通过 NG-ZORRO 来初始化名为 jimmy-demo项目。那么,我们就可以在 package.json 上看到默认的启动和构建命令行:

{
  "scripts": {
    "start": "ng serve",
    "build": "ng build"
  }
}

实际上,它等同于运行了👇:

{
  "scripts": {
    "start": "ng serve jimmy-demo",
    "build": "ng build jimmy-demo"
  }
}

我们怎么知道它是默认运行了 jimmy-demo 项目呢?

这个问题的答案,我们可以通过查找 angular.json 文件来解答。

angular.json 就是默认导出了该项目:

"defaultProject": "jimmy-demo"

很好,现在我们知道了,我们运行 ng serve 是运行导出的默认的文件。运行 ng serve jimmy-demo 是运行执行的 jimmy-demo 文件。

我们来看看 build 之后的目录结构,如下:

Angular 多项目管理

是的,这个导出的目录,也可以在 angular.json 中找到答案:

"outputPath": "dist/jimmy-demo"

整个的 angular.json 文件见项目初始化默认的 angular.json 文件

我们简单 run 一下打包文件:

http-server -p 8081 dist/jimmy-demo

Angular 多项目管理

多项目配置

👌,上面我们已经知道了,是通过配置 angular.json 文件实现了项目的运行和打包等。

那么,我们有没有发现,整个默认的项目,配置的文件,其实都是放在字段 projects 下面。

哦😯,那么我们可以通过在 projects 下面配置另外一个项目不就行了吗?

在开始前,我们先看看项目 jimmy-demo 下的文件:

Angular 多项目管理

嗯~,我们参考该目录结构做下调整,并添加一个名为 app01app02 的项目,并把默认的项目放在 app01。调整后的 jimmy-demo 目录如下:

Angular 多项目管理

然后我们更改下 app01angular.json 中文件,完整的文件见 app01 项目的 angular.json 文件

然后更改下 app01/tsconfig.app.json 的路径指向:

/* To learn more about this file see: https://angular.io/config/tsconfig. */
{
  "extends": "../../tsconfig.json", // ./tsconfig.json 更正
  "compilerOptions": {
    "outDir": "../../out-tsc/app", // ./out-tsc/app 更正
    "types": []
  },
  "files": [
    "src/main.ts",
    "src/polyfills.ts"
  ],
  "include": [
    "src/**/*.d.ts"
  ]
}

然后我们重新启动项目:

ng serve app01

看到的效果和项目初始化的一样:

Angular 多项目管理

呀呀呀~试验成功!

那么,我们依瓢画葫芦,在 angular.json 中进行配置项目 app02(感兴趣的读者自行尝试)。

然后我们再更改下 package.json 的启动命令行:

{
  "script": {
    "startApplication": "ng serve $APPLICATION",
    "start:app01": "APPLICATION=app01 npm run startApplication",
    "start:app02": "APPLICATION=app01 npm run startApplication",
    "buildApplication": "ng build $APPLICATION",
    "build:app01": "APPLICATION=app01 npm run buildApplication",
    "build:app02": "APPLICATION=app02 npm run buildApplication",
  }
}

我们打包这两个项目 npm run build:app01npm run build:app02,得到 dist 内容。

Angular 多项目管理

最后,我们模拟下发布查看:

http-server -p 8081 dist/app01
http-server -p 8082 dist/app02

效果如下动图:

Angular 多项目管理

参考

转载自:https://juejin.cn/post/7292024625793417270
评论
请登录