使用 Yeoman (mem-fs-editor) 重命名新创建的目录 [英] Rename a newly-created directory using Yeoman (mem-fs-editor)

查看:26
本文介绍了使用 Yeoman (mem-fs-editor) 重命名新创建的目录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试重命名目标目录中的文件夹.我的 templates 文件夹中的目录结构如下所示:

I'm trying to rename a folder in the destination directory. The directory structure inside my templates folder looks like this:

root/
├── generators
│   └── app
│       ├── templates
│       │   └── app
│       │       └── widget
│       │           ├── widget.controller.ts
│       │           ├── widget.service.ts
│       │           └── widget.module.ts
│       └── index.js
└── .yo-rc.json

我正在尝试将 widget 目录(在 destinationPath 中)重命名为用户在 prompting 阶段输入的名称.这是我尝试这样做的方式:

I'm trying to rename the widget directory (in destinationPath) to a name that the user enters during the prompting stage. Here's how I'm attempting this:

module.exports = generators.Base.extend({
    copyAppTemplate: function () {
        this.fs.copyTpl(this.templatePath('**/*'), this.destinationPath('.'), this.props);

        this.fs.move(
            this.destinationPath('app/widget'),
            this.destinationPath('app/' + this.props.widgetName)
        );
    }
})

copyTpl 的调用正确地将应用程序从 templatePath 构建和模板化到 destinationPath.但是,当调用 fs.move 操作时,我收到以下错误消息:

The call to copyTpl is correctly scaffolding and templating the app from the templatePath to the destinationPath. However, when the fs.move operation is called, I get the following error message:

PS C:\Users\username\code\generator-dashboard-widget-test> yo dashboard-widget
? Your widget's name: (generator-dashboard-widget-test)
? Your widget's name: generator-dashboard-widget-test

events.js:154
    throw er; // Unhandled 'error' event
    ^
AssertionError: Trying to copy from a source that does not exist: C:\Users\username\code\generator-dashboard-widget-test\app\widget
    at EditionInterface.exports._copySingle (C:\Users\username\code\generator-dashboard-widget\node_modules\mem-fs-editor\lib\actions\copy.js:45:3)
    at EditionInterface.exports.copy (C:\Users\username\code\generator-dashboard-widget\node_modules\mem-fs-editor\lib\actions\copy.js:23:17)
    at EditionInterface.module.exports [as move] (C:\Users\username\code\generator-dashboard-widget\node_modules\mem-fs-editor\lib\actions\move.js:4:8)
    at module.exports.generators.Base.extend.copyAppTemplate (C:\Users\username\code\generator-dashboard-widget\generators\app\index.js:54:17)
    at Object.<anonymous> (C:\Users\username\code\generator-dashboard-widget\node_modules\yeoman-generator\lib\base.js:431:23)
    at C:\Users\username\code\generator-dashboard-widget\node_modules\run-async\index.js:26:25
    at C:\Users\username\code\generator-dashboard-widget\node_modules\run-async\index.js:25:19
    at C:\Users\username\code\generator-dashboard-widget\node_modules\yeoman-generator\lib\base.js:432:9
    at processImmediate [as _immediateCallback] (timers.js:383:17)

据我从 Yeoman 文件系统文档 中了解到,虚拟机上的所有操作文件系统是同步的,所以 app/widget 目录应该在 mem-fs-editor 实例尝试移动它之前存在.

From what I understand from the Yeoman file system documenation, all actions on the virtual file system are synchronous, so the app/widget directory should exist before the mem-fs-editor instance attempts to move it.

是否有不同的方式来重命名目录?

Is there a different way I should be renaming the directory?

我在带有节点 5.6.0 的 Windows 8.1 上使用 Yeoman 1.8.4.

I'm using Yeoman 1.8.4 on Windows 8.1 with node 5.6.0.

推荐答案

我没有弄清楚这个具体问题,但我能够通过使用 gulp-rename 插件作为转换流:

I didn't figure out this specific issue, but I was able to accomplish what I was after by using the gulp-rename plugin as a transform stream:

copyAppTemplate: function () {
    var _this = this;

    // move a file like "app/widget/widget.controller.ts" to 
    // "app/my-widget-name/my-widget-name.controller.ts"
    this.registerTransformStream(rename(function (path) {
        path.dirname = path.dirname.replace('widget', _this.props.widgetName);
        path.basename = path.basename.replace('widget', _this.props.widgetName);
        return path;
    }));

    this.fs.copyTpl(this.templatePath('**/*'), this.destinationPath('.'), this.props);
},

我还打开了一个 GitHub 问题来跟进此行为:https://github.com/yeoman/yo/issues/455

I've also opened up a GitHub issue to follow up with this behavior here: https://github.com/yeoman/yo/issues/455

这篇关于使用 Yeoman (mem-fs-editor) 重命名新创建的目录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆