如何为 Angular 2+ 编写可重用的私有库
How to write a reusable private library for Angular 2+
我已经创建了一个通用框架来创建仪表板,它由使用 Angular-CLI 的多个模块组成。
有些模块是完全独立的。使用该库的开发人员可以按需在他们的项目中添加模块。我在 Angular Js 1.0 中创建了该框架的先前版本,在此我以 javascript min 文件形式交付。
要将此库创建为私有而不是 public,我需要注意哪些事项?或者有什么方法可以将我的模块打包为单独的模块并在没有 NPM 的情况下交付?
这个问题归结为两个独立的任务:创建库包并在内部发布。
创建库包
为了创建支持 AOT 的库,您需要使用 ngc -p src/tsconfig-aot.json
进行编译。
tsconfig-aot.json 是 tsconfig.json 的副本,带有附加部分:
"files": [
"./app/index.ts"
],
"angularCompilerOptions": {
"annotateForClosureCompiler": true,
"genDir": "../dist/out-lib-tsc",
"skipMetadataEmit" : false,
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
"flatModuleOutFile": "libname.js",
"flatModuleId": "libname"
}
我需要通过将文件从 src/app 移动到输出目录的根目录来修复目录结构。然后将 src/app 和 src/asserts 复制到输出目录。
那里有几个详细的指南。例如Distributing an Angular Library - The Brief Guide
发布库包
发布私有库有几种选择:
- 在 git repository 中引用一个分支 注意:使用不同的存储库进行开发(没有编译器输出)和发布可能是个好主意
- npm 为 fee
提供私有存储库
- 您可以设置本地注册表(例如Artifactory or Sinopia)
我已经创建了一个通用框架来创建仪表板,它由使用 Angular-CLI 的多个模块组成。
有些模块是完全独立的。使用该库的开发人员可以按需在他们的项目中添加模块。我在 Angular Js 1.0 中创建了该框架的先前版本,在此我以 javascript min 文件形式交付。
要将此库创建为私有而不是 public,我需要注意哪些事项?或者有什么方法可以将我的模块打包为单独的模块并在没有 NPM 的情况下交付?
这个问题归结为两个独立的任务:创建库包并在内部发布。
创建库包
为了创建支持 AOT 的库,您需要使用 ngc -p src/tsconfig-aot.json
进行编译。
tsconfig-aot.json 是 tsconfig.json 的副本,带有附加部分:
"files": [
"./app/index.ts"
],
"angularCompilerOptions": {
"annotateForClosureCompiler": true,
"genDir": "../dist/out-lib-tsc",
"skipMetadataEmit" : false,
"skipTemplateCodegen": true,
"strictMetadataEmit": true,
"flatModuleOutFile": "libname.js",
"flatModuleId": "libname"
}
我需要通过将文件从 src/app 移动到输出目录的根目录来修复目录结构。然后将 src/app 和 src/asserts 复制到输出目录。
那里有几个详细的指南。例如Distributing an Angular Library - The Brief Guide
发布库包
发布私有库有几种选择:
- 在 git repository 中引用一个分支 注意:使用不同的存储库进行开发(没有编译器输出)和发布可能是个好主意
- npm 为 fee 提供私有存储库
- 您可以设置本地注册表(例如Artifactory or Sinopia)