从本地文件夹或网络文件夹安装 Angular 库

Sun*_*Sun 7 npm angular angular-library

如果我创建一个像这样的角度库:

ng new libraries-workspace --create-application=false
cd libraries-workspace
ng generate library test-library
Run Code Online (Sandbox Code Playgroud)

现在我建立了图书馆

ng build test-library --watch
Run Code Online (Sandbox Code Playgroud)

现在,如果我在完全不同的文件夹(远离工作区)中创建一个新的角度应用程序

ng new test-project

cd test-project
Run Code Online (Sandbox Code Playgroud)

如何在不发布到 NPM 的情况下引用或安装我的库。所以基本上我想从文件夹安装库

像这样的东西:

ng add test-library c:\libraries-workspace\dist\test-library...
Run Code Online (Sandbox Code Playgroud)

我不想将我的项目添加到工作区文件夹中。

谢谢

som*_*axy 8

编辑 07.02.2021:更简单的方法

您可以将角度库直接链接到您选择的应用程序,例如您的主应用程序。为此,请按照下列步骤操作:

  1. 在终端中导航到 Angular 库项目的输出目录并运行命令npm link。您可能必须触发 ng build 一次,以便输出目录存在。这将使您的库在您的计算机上本地可用。
  2. 现在导航到您的主应用程序,其中您的角度库用作依赖项并运行命令npm link [name_of_your_module]
  3. 添加到项目 > 架构师 > 构建"preserveSymlinks": true下的 angular.json 文件
  4. 使用 ngserve 运行您的主应用程序,在您的库中进行一些更改,然后构建它。根据您的 IDE,您可以创建一个触发自动构建的监视任务。您应该能够看到您的更改。
  5. npm unlink [name_of_your_module]最后,如果您完成了更改测试,则可以通过在主应用程序的根目录中运行命令来取消依赖项与主应用程序的链接。转到您的角度库项目目录并运行,npm unlink以便您的库不再在本地可用。您现在可以发布更改并使用 npm install 在主应用程序中安装最新版本。

请记住,它必须是 dist 输出文件夹,因为 Angular cli 不支持直接链接您的库。您还可以以相同的方式将库链接到其他角度库,但您必须添加"preserveSymlinks": true到库的tsconfig.json

旧答案:

您必须首先打包库的构建输出。为此,您必须在构建输出文件夹中使用npm pack命令。Npm pack 将创建一个包,复制创建的包的路径,导航到终端中的测试项目并点击 npm install "C:\path\to\npm\pack\package"


RIT*_*AVI 7

提出了执行此操作的方法之一@sombrerogalaxy

然而,使用该方法的最大缺点npm link是,如果您对库进行任何更改,则需要一次又一次地构建库。
这不是一个非常有效的方法。

我猜,您可能希望在您的角度应用程序中立即看到对您的库所做的更改的结果。如果这是预期行为,您可以按照以下步骤操作。

  • 导航到库工作区并使用ng build --watchnpm build --watch构建库项目。此命令将创建一个dist包含所有库工件的文件夹。通过这样做,您可以在“监视”模式下构建库项目,以便任何代码更改都将立即反映在目标应用程序中。
  • 现在,导航到您的角度应用程序并使用命令安装库npm install C:/some_folder/your_library_root_folder/dist/your_library。将库路径替换为创建库的本地系统的物理路径。运行此命令后,检查您的角度应用程序的package.json文件。依赖项部分将显示该库是从本地计算机(特别是从上面提到的路径)而不是 npm 存储库中提取的。
  • 使用ng serve或运行您的角度应用程序npm start

就这样...

现在在您的库中进行任何代码更改并保存。当我们在“监视”模式下运行该库时,它将自动反映在您的目标应用程序中。

更新:根据一些用户的建议,您可能希望preserveSymlinks在 angular.json 文件中设置为 true