npm为Angular库发布

时间:2019-02-01 09:39:32

标签: angular npm package publish

我有一个带有库,测试器和e2e项目的“ ng库”。当我运行“ ng build”时,它将所有3个项目打包在“ dist”下。我只需要发布lib项目。我知道从'cd'到'dist / lib'和'npm publish'都可以,但是我没有这个选项,因为我们的CI版本仅在项目根目录中有'npm publish'。 因此,我的问题是仅针对lib项目,如何从根实现发布?

2 个答案:

答案 0 :(得分:1)

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

选项1:

$ npm publish <path-to-lib-folder>

选项2:

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

答案 1 :(得分:0)

让我的同伴们高兴!最后,经过5天的研究,我们有了解决方案!这仍然是一个``解决方法'',因为目前尚没有明确的方式来支持当前的``npm''版本(截至2019年2月)通过package.json定义``默认''发布目录-这将是理想且简单的方法。因此,-

解决方案

ng build根项目运行ng library。这将生成包含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的路径。所以

  

“主要”:“ bundles / your-library-project.umd.js”,

成为

  

“主要”:“ dist / your-library-project / bundles / your-library-project.umd.js”,

这实际上告诉npm,当它将库模块导入另一个应用程序时,入口点是dist/your-library-project/bundles/your-library-project.umd.js-这允许Web应用程序通过以下方式导入模块:

import {YourLibraryModule} from 'your-library';

此外,根据根package.json中还有哪些其他属性,可能需要进一步修复。例如。我必须摆脱dependencies项目未直接使用的所有library。另外,根据用途将库的dependencies转换为peerDependenciesdevDependencies。另外,必须更新根Angular项目angular.json才能删除tester项目。我在angular.json项目中创建了另一个tester,以使其本身成为Angular应用程序,与library项目不同,后者并未发布。

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