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

时间:2016-02-18 14:48:47

标签: javascript visual-studio yeoman yeoman-generator

我正在研究基于Yeoman generator-generator的样本yeoman发生器。生成的默认writing函数如下:

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
    }
});

但是,我在第一个move

的行处收到断言错误
AssertionError: Trying to copy from a source that does not exist

我认为文件/目录复制是同步的,但是当我在第一次调用this.fs.exists(this.destinationRoot())之前运行this.fs.move时,它会返回false。我怀疑它与this.fsmem-fs的实例有关,其中目录/文件只存在于内存中,直到writing函数完成。

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

1 个答案:

答案 0 :(得分:3)

如果在复制功能中使用glob模式,它是否有效?

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

mem-fs操作是同步的,如果文件真的被复制,则存在检查将通过。