我有一个带有库,测试器和e2e项目的“ ng库”。当我运行“ ng build”时,它将所有3个项目打包在“ dist”下。我只需要发布lib项目。我知道从'cd'到'dist / lib'和'npm publish'都可以,但是我没有这个选项,因为我们的CI版本仅在项目根目录中有'npm publish'。 因此,我的问题是仅针对lib项目,如何从根实现发布?
答案 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
转换为peerDependencies
或devDependencies
。另外,必须更新根Angular项目angular.json
才能删除tester
项目。我在angular.json
项目中创建了另一个tester
,以使其本身成为Angular应用程序,与library
项目不同,后者并未发布。
有了所有这些更改,我终于能够从项目的根目录运行npm publish
并仅发布dist/your-library-project
。这对我来说非常重要,因为CI服务器的“发布”步骤只能从项目根目录执行npm publish
。通过这些更改,我甚至可以从项目根目录仅发布library
模块。当然,这只是一种解决方法/破解,但我很高兴至少可以完成。快乐的日子!