如何在本地开发两个角度模块,模块A导入模块B

时间:2017-10-18 11:37:45

标签: node.js angular npm npm-link ng-packagr

在angularjs中开发两个本地项目时(其中一个导入另一个),我只需运行" npm link"在模块B的文件夹中然后运行" npm link module-B"在我的主模块文件夹中,每当我更改模块B中的文件时,我都会直接在浏览器服务模块A中看到它。

但使用angular(4)似乎并不容易。

我使用ng-packagr生成一个dist文件夹 我在dist文件夹中运行npm链接 我在主模块的文件夹中运行npm link module-B 然后我运行服务--preserve-symlinks。

到目前为止,它可以理解模块B的组件。 但是,如果我尝试更改模块B中的某些内容,请重新运行ng-packagr,我的主要模块" s" ng serve"无法编译,我必须停止并启动ng服务。

我认为ng-packagr首先删除dist文件夹,这会触发ng服务中的重建失败,并且没有注意到删除dist文件夹后新创建的文件。

我们是否必须使用ng-packagr或是否有其他方式进行多项目本地开发。

更新

如果我们在ng-packagr.js中注释掉这一部分,那么无论何时更改文件并运行ngpackagr,它都不会删除文件夹和浏览器更新:

return Promise.all([ /*rimraf_1.rimraf(p.dest),*/ rimraf_1.rimraf(p.workingDirectory) ]);

但是运行ng-packagr需要一些时间,具体取决于库的大小。因为它构建了整个事物而不仅仅是更改的文件。

1 个答案:

答案 0 :(得分:4)

好的我觉得我搞定了。这种解决方案更直接,不使用ng-packagr。我做的是:

  • 在模块B中,我将所有@ angular-dependencies从依赖项移动到peerDependencies。
  • 将index.ts添加到模块B的根文件夹中,其中包含:
    从" ./ src /.../ panel.module"
  • 导出*
  • 运行" npm link"来自模块B的根文件夹
  • 运行" npm链接模块-B"来自模块A的根文件夹
  • 运行服务--preserve-symlinks

index.ts文件的确使导入保持不变,无论是从npm存储库获取模块还是在本地开发: 从" module-b";

导入{moduleB}

我认为此解决方案仅适用于仅在"父容器中运行的组件",就像使用组件的项目一样。如果moduleB有,假设一个演示模块/页面,我认为必须分两步拆分它,首先将演示模块作为单独的npm项目和Child-npm-Project中的Component-module。