Angular 6 Schematics 无效源(未定义)
Posted
技术标签:
【中文标题】Angular 6 Schematics 无效源(未定义)【英文标题】:Angular 6 Schematics Invalid Source (undefined) 【发布时间】:2018-11-02 11:55:05 【问题描述】:我正在创建一些自定义原理图,以帮助我们快速启动 Angular 库项目。鉴于此,我不希望开发人员必须有一个ng ...
命令清单,他们必须运行以启动和运行库,我只想有一个设置工作区的命令,放置一个在其中的库,进行一些自定义(以开玩笑的方式交换业力,添加一些 CI 配置等)。
我这样做的方法是创建一个以空树开头的原理图,然后从@schematics/angular
调用ng-new
原理图,通过externalSchematic()
然后链接来自同一包的library
原理图,然后是用于进行自定义的自定义示意图的数量。
我想要使用externalSchematic()
而不是将所有外部原理图的代码复制到我的原理图项目中的原因是,当@schematics/angular
更新时,我可以通过执行yarn upgrade-interactive
来合并这些更新并找到并通过运行测试套件解决任何问题。最终,我们可以使用 CI 将其自动化。
我在这里创建了一个小型的自包含示例来重现我的错误:https://github.com/matt328/ng-schematics-test
重现步骤:
git clone
npm install
npm run build
schematics ng-schematics-test:my-full-schematic --name=test-schematic
当我运行原理图时,它会报告Invalid source: undefined.
这里
https://github.com/matt328/ng-schematics-test/blob/master/src/my-full-schematic/index.ts#L30
是我使用externalSchematic()
调用ng-new
的地方。
我对源代码进行了一些挖掘,发现它是由一些角度示意图引起的
"$default":
"$source": "projectName"
在他们的模式中。该错误是由于 projectName
未定义造成的。
还需要做什么才能使用externalSchema()
调用ng-new
?这种方法有效吗,还是有其他方法可以做到这一点?
【问题讨论】:
【参考方案1】:早在 2 月初,我就可以从这个 demo working 获得 externalSchematics
命令的工作版本。当我今天尝试复制之前的结果时,我收到了与您相同的错误(ng-new
、component
和 interface
,当我尝试从原理图项目中运行命令时。
但是,当我创建一个新的 Angular 项目并创建一个指向原理图项目的符号链接时,我能够在 Angular 项目中成功生成component
和interface
。 ng-new
尚未成功,因为 node_modules
映射并不那么简单(它确实提示我输入一些必需的参数,version
和 name
在引发缺失模块错误之前,我想这可能被解释为作为进展)。
【讨论】:
嘿@ericksoen!能否请您分享新项目中的依赖项?即使使用全新安装的环境,它仍然无法正常工作。谢谢! 这是repo link to a paired down version of my schematic project。它对ng-new
命令进行了一次通过测试。我还验证了如果您创建一个指向项目根目录的符号链接,您可以使用它来使用ng new project-name --collection demo-schematic
初始化新项目【参考方案2】:
这个花了我一段时间:
您似乎必须在真正的 Angular 项目中运行任何扩展 @schematics/angular
示意图的示意图。为此,请执行以下操作:
$ cd <path to an angular project>
$ npm link <path to your custom schematics project>
$ ng g <schematics-collection-name>:<schematic-name> [params]
这应该可以工作,因为您的扩展 @schematics/angular 原理图现在在 angular 项目中运行并且能够获得正确的源代码。
另请注意:使用$ schematics <collection-name>:<schematics-name>
运行它会导致同样的未定义错误!
希望对你有帮助
【讨论】:
以上是关于Angular 6 Schematics 无效源(未定义)的主要内容,如果未能解决你的问题,请参考以下文章
如何修复“找不到模块'@angular-devkit/schematics'”
在集合“@schematics/angular”中找不到原理图“库”
如何运行@angular-eslint/schematics:convert-tslint-to-eslint