2017-04-07 27 views
0

我有一个最不寻常和令人沮丧的问题。尝试NPM使用Angular-CLI发布并安装自定义的angular2组件;只编译第一次

我有一个Ng2组件叫做通过日期选择器,我正在尝试NPM发布,以便它可以很容易地在其他项目中使用。为了做到这一点,我将它制作成了一个Angular2组件库。 via-date-picker导出一个名为ViaDatePickerModule的模块,我想在其他地方导入该模块。

为了测试并确保它正在正确发布,我将安装NPM并将其导入到一个空的Angular-CLI项目中,我正在调用npm-test

所以我用 “NG服务” 运行我的NPM-测试应用程序,而我得到这个错误:

ERROR in ViaDatePickerModule is not an NgModule webpack: Failed to compile

然而,尽管这个错误,该项目编译反正:

Has error, but compiles anyway

当我打开我的项目时,瞧,一切正常!

但是,这只发生在第一个时间,我运行该项目。在连续尝试运行通过“NG服务”的项目,我会得到相同的编译错误,但这次的项目刚刚平了拒绝完成它的编译:

enter image description here

我不知道为什么我遇到这个错误,以及为什么Angular-CLI有时会运行我的项目,而不是其他项目。

我已经冲刷网上寻找答案,并试图每一个解决方案,我可以找到这个错误,以及我能想到的所有其他的事情:

  • 我试图在调整tsConfig设置我组件库
  • 我一直在使用rollup.js代替gulp.js建立我的组件库
  • 我试图复制现有试过,工作组件库,然后小心地换掉现有的代码为我自己
  • 我已经降级了Angular CLI
  • 我已经升级角CLI
  • 我已经降级打字稿
  • 我已经升级打字稿
  • 我已经删除并重新安装node_modules几次
  • 我已经删除并重新开始我整个项目两次

无论我做什么,我都会继续来到我上面发布的相同webpack错误; ViaDatePickerModule不是NgModule。我完全没有想法。任何人都可以提供帮助将是疯狂的帮助。

有关完整彻底的缘故,我已经创建了一个包含所有的文件包括,分为两个主要的目录公共repo on github here

  • COMPONENT_BEFORE_PUBLISHING:包含组件库从我的计算机运行“NPM发布“
  • WHAT_IS_IMPORTED_INTO_NODE_MODULES:包含正在被导入到我的NPM-测试项目的node_modules目录

再次生成的目录,任何帮助,任何人可以提供将是非常非常感激!真的,我会永远感激。

+0

我简要地看了一下你的回购。乍看起来很好看好奇你为什么要将你的“组件库”转换成js?您可以轻松地将您的库作为直接TS库来使用,不需要进行转储。与此同时,我会克隆你的回购并尝试。 –

+0

谢谢@AhmedMusallam!你是一位试图帮助我解决问题的圣人,我真的很感激。我转换成js只是因为我查找组件库的每个指南似乎都暗示这是实现它的方式。尽管我愿意接受任何解决方案,但我的目标只是为了能够NPM发布并安装一个angular2组件 – SemperCallide

+0

就是这样。如果您确信所有的消费者都会从TS项目中导入您的组件,模块等,例如角度cli。你可以发布你的'TS'源文件。但是,如果您希望将库也作为'JS'' es5'或'es6'模块来使用,那么您应该进行转储。此外,你有没有尝试使用角编译器'ngc'而不是打字稿编译器'tsc'? 'ngc'是'tsc'周围的一个包装,可能你应该从那里开始,当你在这里时,看看这个:https://medium.com/@isaacplmann/getting-your-angular-2-library-ready -for-aot-90d1347bcad –

回答

1

如果您确定所有消费者都会从TS项目(如angular-cli)中导入您的组件,模块等。您可以直接发布您的源代码,而无需编译。 IE浏览器。您将发布静态.ts文件,这些文件可以导入任何可以为您进行转译的项目。

但是,如果你希望你的库也被消耗为JSes5es6模块,那么你应该 transpile。

此外,您可以尝试角编译器ngc而不是打字稿编译器tscngc是围绕tsc的包装。你可以从那里开始,有很多图书馆的初学者可以帮助你启动一个角度库,并对其进行优化,以便编译AOT