javascript-Yeoman复制模板文件后重命名文件

我正在基于Yeoman的generator-generator开发示例yeoman生成器.生成的默认编写函数如下所示:

generators.Base.extend({
    writing: function () {
        this.fs.copyTpl(
            this.sourceRoot(),
            this.destinationRoot());
    }
});

我的模板文件包含Visual Studio项目和解决方案文件,因此我希望将其重命名以匹配appName:

generators.Base.extend({
    writing: function () {
        this.fs.copyTpl(
            this.sourceRoot(),
            this.destinationRoot(),
            { appname: this.props.appName });

        // Rename directory to match 'appName'
        this.fs.move(
            this.destinationPath('foo'), // A directory
            this.detinationPath(this.props.appName)); // From prompt when user types yo webapp

        // Rename Visual Studio .sln file to match 'appName'
        this.fs.move(
            this.destinationPath('foo/bar.sln'),
            this.destinationPath(this.props.appName + '/' + this.props.appName + '.sln');

       // ...similar renames to Visual Studio .csproj files
    }
});

但是,在执行第一步的那一行上,我得到一个断言错误:

AssertionError: Trying to copy from a source that does not exist

我以为文件/目录复制是同步的,但是当我在第一次调用this.fs.move之前运行this.fs.exists(this.destinationRoot())时,它返回false.我怀疑这与this.fs有关,它是mem-fs的实例,其中目录/文件仅存在于内存中,直到写入功能完成为止.

如果我需要重命名文件/目录怎么办?

解决方法:

如果您在复制功能中使用了全局模式,是否可行?

this.fs.copyTpl(
        this.templatePath('**'),
        this.destinationPath(),
        { appname: this.props.appName });

mem-fs操作是同步的,如果确实复制了文件,则存在检查将通过.

上一篇:[react] Mern和Yeoman脚手架有什么区别?


下一篇:spring-boot-plus是易于使用,快速,高效,功能丰富,开源的spring boot 脚手