【问题标题】:Can I put applications on same folder level as workspace in Angular?我可以将应用程序放在与 Angular 中的工作区相同的文件夹级别吗?
【发布时间】:2020-04-21 03:05:50
【问题描述】:

我正在尝试在 Angular 8 中使用 Workspace 创建一些应用程序,我想知道是否可以有这样的文件夹结构:

|/Myproj
       |/Workspace
       |
       |/Application_1
       |
       |/Application_2

在教程的任何地方,带有应用程序的文件夹都在 Workspace/projects 内,但出于某种原因,我希望将它放在同一级别,因此直接在 Myproj 文件夹内的工作区旁边。我试图更新Workspace/angular.json 中配置中的所有路径,例如。从这个"root": "projects/Application_1", 到这个"root": "../Application_1",。但是一直在构建 (ng build --project=Application_1) 我有一些错误,例如。 An unhandled exception occurred: Cannot locate node_modules directory.

我想知道这是否可能?或者我不应该浪费我的时间,因为这是它的工作方式,没有办法改变它。我也试图通过NRWL 找到一些解决方案,但没有任何成功。

【问题讨论】:

  • 如果您的应用程序位于Myproj 的根目录中,Workspace 文件夹中的内容会是什么?
  • Workspace 的文件。 Angular.json、node_modules、tsconfig.json 等...

标签: angular monorepo nrwl


【解决方案1】:

更新

如果不确切了解您为什么要移动东西,我不相信您的方法会奏效。有关 node 如何定位 node_modules 目录,请参阅this answer。如果在根目录中找不到它,它将搜索父目录,而不是子目录。听起来你想在Workspace(子目录)中有angular.json和node_modules,这是有问题的。

如果您不喜欢当前嵌套的深度,您是否可以将整个 Angular 工作区上移一层(基本上摆脱 Workspace 并让 Myproj 成为新的工作区根)?

简单地将项目移动到工作区中的不同目录的旧答案

NX 用户在这里。这绝对是可能的,但我不建议你这样做。在appslibs 之间至少拥有一个层次的组织有很多价值,尤其是随着你的monorepo 增长。

但是,如果您打算这样做,我在下面列出了您需要在 NX 单一存储库中更新的文件和属性。对于普通的 Angular 工作区,这个想法是相同的,您需要修改的文件路径不仅仅是angular.json

注意:不要用相对路径替换绝对路径。 apps/my-app 变为 my-app 不是 ../my-app

我的应用程序的 angular.json 配置

  • 更新以下属性的绝对路径
    • root
    • sourceRoot
    • architect.build.options.outputPath
    • architect.build.options.index
    • architect.build.options.main
    • architect.build.options.polyfills
    • architect.build.options.tsConfig
    • architect.build.options.assets
    • architect.build.options.styles
    • architect.build.configurations.production.fileReplacements.replace
    • architect.build.configurations.production.fileReplacements.with
    • architect.lint.options.tsConfig
    • architect.lint.options.exclude
    • architect.test.options.jestConfig
    • architect.test.options.tsConfig
    • architect.test.options.setupFile

my-app/jest.config.js

  • 更新以下属性的相对路径:
    • preset
    • coverageDirectory

my-app/tsconfig.app.json

  • 更新以下属性的相对路径:
    • compilerOptions.outDir

my-app/tsconfig.json

  • 更新以下属性的相对路径:
    • extends

my-app/tsconfig.spec.json

  • 更新以下属性的相对路径:
    • compilerOptions.outDir

my-app/tslint.json

  • 更新以下属性的相对路径:
    • extends

【讨论】:

  • 我必须拥有 NX 吗?
  • 最近更新了我的答案。您不需要使用 NX,只需注意您需要更新多个文件中的大量文件路径(不仅仅是 angular.json)。我列出的一些文件仅适用于使用 NX 创建的应用程序。不过我个人推荐 NX
  • 你说过do not replace an absolute path with a relative path. apps/my-app becomes my-app NOT ../my-app 怎么会这样?如果应用程序文件夹不再在工作区文件夹中,那么我们必须从工作区路径返回到主文件夹,在这种情况下为 Myproj
  • 我想我对您在问题中如何命名文件夹感到困惑。我最初以为您是在尝试将您的应用程序上移一级,这就是我回答问题的方式。您是说要将 Application1 移出工作区吗?
  • 是的,我就是这个意思。还有可能吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-21
  • 1970-01-01
相关资源
最近更新 更多