代码之家  ›  专栏  ›  技术社区  ›  Nathan Friend

使用Yeoman(mem-fs编辑器)重命名新创建的目录

  •  0
  • Nathan Friend  · 技术社区  · 9 年前

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

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

    我正在尝试重命名 widget 目录(在 destinationPath )到用户在 prompting 阶段我是这样尝试的:

    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 目标路径 然而,当 fs.move 调用操作时,我收到以下错误消息:

    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 file system documenation ,虚拟文件系统上的所有操作都是同步的,因此 app/widget 目录应在 mem-fs-editor 实例尝试移动它。

    有没有其他方法可以重命名目录?

    我在Windows 8.1上使用Yeoman 1.8.4,节点为5.6.0。

    1 回复  |  直到 9 年前
        1
  •  1
  •   Nathan Friend    9 年前

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

    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