Angular 角度库的npm发布

Angular 角度库的npm发布,angular,npm,package,publish,Angular,Npm,Package,Publish,我有一个包含lib、tester和e2e项目的“ng库”。当我运行“ng build”时,它将所有3个项目打包在“dist”下。我只需要发布lib项目。我知道'cd'到'dist/lib'和'npm publish'可以工作,但我没有这个选项,因为我们的CI构建只在项目根目录中执行'npm publish'。 因此,我的问题是如何仅为lib项目实现从根目录发布?您有两个选项,但这两个选项都需要更改CI脚本: 备选案文1: $ npm publish <path-to-lib-folder&

我有一个包含lib、tester和e2e项目的“ng库”。当我运行“ng build”时,它将所有3个项目打包在“dist”下。我只需要发布lib项目。我知道'cd'到'dist/lib'和'npm publish'可以工作,但我没有这个选项,因为我们的CI构建只在项目根目录中执行'npm publish'。
因此,我的问题是如何仅为lib项目实现从根目录发布?

您有两个选项,但这两个选项都需要更改CI脚本:

备选案文1:

$ npm publish <path-to-lib-folder>
$npm发布
备选案文2:

$ cd <path-to-lib-folder>
$ npm publish
$cd
$npm发布

让我的开发者们高兴吧!最后,经过5天的思考,我们终于找到了解决方案!这仍然是一个“变通方法”,因为当前的“npm”版本(截至2019年2月)没有明确的方式支持通过package.json定义“默认”发布目录,这将是一个理想且更简单的方法。所以这里是-

解决方案

ng库
根项目运行
ng构建
。这将生成
dist
文件夹,其中包含
library
项目和
tester
项目。打开
dist/your library project/package.json
——这是
ng packager根据库的package.json生成的package.json

将自动生成的属性从
dist/your library project/package.json
复制到根目录
/package.json

将所有路径更改为相对于根
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
——这允许WebApp通过以下方式导入模块:

import {YourLibraryModule} from 'your-library';
此外,根据root
package.json中的其他属性,它可能需要进一步的修复。例如,我必须去掉所有
项目没有直接使用的
依赖项
。另外,根据库的用途,将库的
依赖项
转换为
对等依赖项
依赖项
。此外,必须更新根Angular项目
Angular.json
,以删除
tester
项目。我在
tester
项目中创建了另一个
angular.json
,使其本身成为一个angular应用程序,独立于
项目,该项目尚未发布


通过所有这些更改,我终于能够从项目的根目录运行
npm publish
,并且只发布
dist/your library项目。这对我来说非常重要,因为我的CI服务器的“发布”步骤只能从项目根目录执行
npm Publish
。通过这些更改,我甚至可以从项目根目录发布
模块。当然,这只是一个变通/破解方法,但我很高兴至少可以做到这一点。快乐的日子

您不能运行
npm publish
?正如我提到的,我可以在本地运行“npm publish”,我知道这个解决方案。但CI并没有这样做。它是企业范围的CI,目前仅支持在根目录下运行“npm发布”。我正在寻找是否有一些解决方法,例如package.json参数或预发布步骤,如原始问题中所述,我知道这个解决方案,但CI服务器只能在根目录下运行“npm publish”。遗憾的是,在发布步骤中没有传递到“npm发布”或执行“cd”的规定。在像我工作的这样的大型组织中,更改CI步骤不是一项容易的任务。@Pat那么很遗憾,就我所知,您的问题没有答案。谢谢。我不明白这怎么会这么复杂…希望对你有帮助。你可以投票帮助其他有类似问题的人
import {YourLibraryModule} from 'your-library';