尝试使用 Angular-CLI 发布和安装自定义 angular2 组件;只编译第一次
Trying to NPM publish and install a custom angular2 component with Angular-CLI; only compiles the first time
我遇到了一个最不寻常和最令人沮丧的问题。
我有一个名为 via-date-picker 的 Ng2 组件,我正在尝试将其发布到 NPM,以便它可以轻松地用于其他项目。为此,我把它做成一个Angular2组件库。 via-date-picker 导出一个名为 ViaDatePickerModule 的模块,我想将其导入其他地方。
为了测试并确保它被正确发布,我正在安装 NPM 并将其导入到一个空的 Angular-CLI 项目中,我正在调用 npm-测试。
所以我 运行 我的 npm-test 应用程序使用 "ng serve",我得到这个错误:
ERROR in ViaDatePickerModule is not an NgModule
webpack: Failed to compile
然而,尽管出现了这个错误,该项目仍然可以编译:
当我打开我的项目时,你瞧,一切正常!!
但这只发生在我 运行 项目的 第一次 时间。在通过 "ng serve" 对项目 运行 的连续尝试中,我得到了相同的编译错误,但这次项目完全拒绝完成它的编译:
我不知道为什么我会收到这个错误,也不知道为什么 Angular-CLI 有时会 运行 我的项目而不是其他项目。
我在网上搜索了答案并尝试了所有我能找到的解决此错误的方法,以及我能想到的所有其他方法:
- 我试过调整组件库中的 tsConfig 设置
- 我试过使用 rollup.js 而不是 gulp.js 来构建我的组件库
- 我试过复制现有的工作组件库,然后小心地将现有代码换成我自己的
- 我已经降级 Angular CLI
- 我已经升级了 Angular CLI
- 我已经降级 Typescript
- 我已经升级了 Typescript
- 我已经删除并重新安装了好几次node_modules
- 我已经删除并重新启动了我的整个项目两次
无论我做什么,我总是遇到我在上面发布的相同的 webpack 错误; ViaDatePickerModule 不是 NgModule。我完全没有想法。任何人都可以提供的任何帮助都会非常有用。
为了完全彻底,我创建了一个 public repo on github here 包含所有涉及的文件,分为两个主要目录:
- COMPONENT_BEFORE_PUBLISHING: 包含我 运行ning "npm publish"
的组件库
- WHAT_IS_IMPORTED_INTO_NODE_MODULES:包含正在导入到我的 npm-test 项目的 node_modules 目录中的结果目录
再次强调,任何人都可以提供任何帮助,我们将非常非常感谢!真的,我将永远感激不已。
如果您 %100 确定您的所有消费者都会从 TS
项目(例如 angular-cli
)导入您的组件、模块等。您可以直接发布 TS
源代码而无需转译。 IE。您将发布静态 .ts
文件,这些文件可以导入任何将为您进行转译的项目。
但是,如果您希望您的库 也作为 JS
es5
或 es6
模块 使用,那么您 应该转译。
此外,您可以尝试使用 angular 编译器 ngc
而不是 typescript 编译器 tsc
? ngc
是 tsc
的包装。您可以从那里开始,那里有许多库启动器可以帮助您启动 angular 库并针对 AOT
编译对其进行优化。
我遇到了一个最不寻常和最令人沮丧的问题。
我有一个名为 via-date-picker 的 Ng2 组件,我正在尝试将其发布到 NPM,以便它可以轻松地用于其他项目。为此,我把它做成一个Angular2组件库。 via-date-picker 导出一个名为 ViaDatePickerModule 的模块,我想将其导入其他地方。
为了测试并确保它被正确发布,我正在安装 NPM 并将其导入到一个空的 Angular-CLI 项目中,我正在调用 npm-测试。
所以我 运行 我的 npm-test 应用程序使用 "ng serve",我得到这个错误:
ERROR in ViaDatePickerModule is not an NgModule webpack: Failed to compile
然而,尽管出现了这个错误,该项目仍然可以编译:
当我打开我的项目时,你瞧,一切正常!!
但这只发生在我 运行 项目的 第一次 时间。在通过 "ng serve" 对项目 运行 的连续尝试中,我得到了相同的编译错误,但这次项目完全拒绝完成它的编译:
我不知道为什么我会收到这个错误,也不知道为什么 Angular-CLI 有时会 运行 我的项目而不是其他项目。
我在网上搜索了答案并尝试了所有我能找到的解决此错误的方法,以及我能想到的所有其他方法:
- 我试过调整组件库中的 tsConfig 设置
- 我试过使用 rollup.js 而不是 gulp.js 来构建我的组件库
- 我试过复制现有的工作组件库,然后小心地将现有代码换成我自己的
- 我已经降级 Angular CLI
- 我已经升级了 Angular CLI
- 我已经降级 Typescript
- 我已经升级了 Typescript
- 我已经删除并重新安装了好几次node_modules
- 我已经删除并重新启动了我的整个项目两次
无论我做什么,我总是遇到我在上面发布的相同的 webpack 错误; ViaDatePickerModule 不是 NgModule。我完全没有想法。任何人都可以提供的任何帮助都会非常有用。
为了完全彻底,我创建了一个 public repo on github here 包含所有涉及的文件,分为两个主要目录:
- COMPONENT_BEFORE_PUBLISHING: 包含我 运行ning "npm publish" 的组件库
- WHAT_IS_IMPORTED_INTO_NODE_MODULES:包含正在导入到我的 npm-test 项目的 node_modules 目录中的结果目录
再次强调,任何人都可以提供任何帮助,我们将非常非常感谢!真的,我将永远感激不已。
如果您 %100 确定您的所有消费者都会从 TS
项目(例如 angular-cli
)导入您的组件、模块等。您可以直接发布 TS
源代码而无需转译。 IE。您将发布静态 .ts
文件,这些文件可以导入任何将为您进行转译的项目。
但是,如果您希望您的库 也作为 JS
es5
或 es6
模块 使用,那么您 应该转译。
此外,您可以尝试使用 angular 编译器 ngc
而不是 typescript 编译器 tsc
? ngc
是 tsc
的包装。您可以从那里开始,那里有许多库启动器可以帮助您启动 angular 库并针对 AOT
编译对其进行优化。