让我的开发伙伴们高兴吧!最后,经过 5 天的努力解决这个问题,我们找到了解决方案!这仍然是一种“解决方法”,因为当前的“npm”版本(截至 2019 年 2 月)没有明确的方式支持通过 package.json 定义“默认”发布目录——这本来是理想且更简单的。所以这里 -
解决方案
为 ng library 根项目运行 ng build。这将生成dist 文件夹,其中包含library 项目和tester 项目。打开dist/your-library-project/package.json - 这是ng-packager 根据您的库的package.json 生成的package.json。
将自动生成的属性从dist/your-library-project/package.json复制到您的根/package.json
"main": "bundles/your-library-project.umd.js",
"module": "fesm5/your-library-project.js",
"es2015": "fesm2015/your-library-project.js",
"esm5": "esm5/your-library-project.js",
"esm2015": "esm2015/your-library-project.js",
"fesm5": "fesm5/your-library-project.js",
"fesm2015": "fesm2015/your-library-project.js",
"typings": "your-library-project.d.ts",
"metadata": "your-library-project.metadata.json",
"sideEffects": false,
"dependencies": {
"tslib": "^1.9.0"
}
将所有路径更改为相对于根 package.json。所以
"main": "bundles/your-library-project.umd.js",
变成
"main": "dist/your-library-project/bundles/your-library-project.umd.js",
这实际上告诉npm,当它将您的库模块导入另一个应用程序时,入口点位于dist/your-library-project/bundles/your-library-project.umd.js - 这允许网络应用程序通过以下方式导入模块:
import {YourLibraryModule} from 'your-library';
此外,根据您的根 package.json 中的其他属性,它可能需要进一步修复。例如。我必须摆脱所有library 项目未直接使用的dependencies。另外,根据用途将图书馆的dependencies 转换为peerDependencies 或devDependencies。此外,必须更新根 Angular 项目 angular.json 以删除 tester 项目。我在 tester 项目中创建了另一个 angular.json 以使其本身成为一个 Angular 应用程序,与 library 项目分开 - 它不会被发布。
通过所有这些更改,我终于能够从项目的根目录运行 npm publish 并仅发布 dist/your-library-project。这对我来说非常重要,因为我的 CI 服务器的“发布”步骤只能从项目根目录执行 npm publish。通过这些更改,我甚至可以从项目根目录发布 library 模块。当然,这只是一种解决方法/hack,但我很高兴它至少可以完成。快乐的日子!