微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么将选项值从 yeoman-environment 传递给 yeoman-generator 不起作用?

如何解决为什么将选项值从 yeoman-environment 传递给 yeoman-generator 不起作用?

我正在使用 yeoman 构建一个简单的生成器。

https://yeoman.io/authoring/integrating-yeoman.html所示 那个

// Or passing arguments and options
env.run('npm:app some-name',{ 'skip-install': true },done);

以下代码将初始化生成器并将选项值传递给它。

var yeoman = require('yeoman-environment');
var env = yeoman.createEnv();
env.register(require.resolve('./generators/index.js'),'express');
env.run("express",{
    entityName: 'entity',entityFields: {'abc':1,'cde':2},});

选项值显示如下 { entityName: '实体',实体字段:{'abc':1,}

这是生成代码

module.exports = class extends Generator {
  constructor(args,opts) {
      super(args,opts);
      console.log('constructor  ',args,opts);
  }
  initializing() {
      const companyName = this.options.companyName; // shows undefined 
      const entityName = this.options.entityName;   // shows undefined 
  }
}

然而,运行生成器表明该选项不会从环境传递到生成器。

  constructor(args,opts);
  }

参数是 []

和选择是

{ sharedData: {},forwardErrorToEnvironment: false,skipLocalCache: true,initialGenerator: true,env:
   Environment {
     domain: null,_events: [Object: null prototype] {},_eventsCount: 0,_maxListeners: 100,options: {},adapter:
      TerminalAdapter {
        promptModule: [Function],console: [Console],log: [Function],tracker: [EventEmitter] },cwd: '/Users/asf/Documents/projects/server',logCwd: '/Users/asf/Documents/projects/server',store:
      Store {
        _generators: [Object],_Meta: [Object],_packagesPaths: {},_packagesNS: [Array] },command: undefined,runLoop:
      Queue {
        queueNames: [Array],__queues__: [Object],runOnAdd: false,_maxListeners: 0 },sharedFs:
      Store {
        domain: null,_events: [Object],_eventsCount: 1,fs: EditionInterface { store: [Store] },lookups: [ '.','generators','lib/generators','dist/generators' ],aliases: [ [Object] ],sharedOptions:
      { sharedData: {},skipLocalCache: true },repository:
      YeomanRepository {
        log: [Function],tracker: [EventEmitter],_repositoryPath: '/Users/asf/Documents/projects/server/.yo-repository',_nodeModulesPath:
         '/Users/asf/Documents/projects/server/.yo-repository/node_modules' },_generators: {} },resolved:
   '/Users/asf/Documents/projects/server/modules/app-generator/server/controllers/generators/app/index.js',namespace: 'express',_: [],help: undefined,h: undefined,'skip-cache': false,'skip-install': false,'force-install': false,'ask-answered': false }

opts 值没有传递选项值。

一个可能的原因是代码遇到错误

(node:47412) UnhandledPromiseRejectionWarning: TypeError: The generator doesn't provides a constructor.
    at Environment._findGeneratorClass (/Users/xisizhe/Documents/projects/server/modules/app-generator/server/controllers/node_modules/_yeoman-environment@3.0.1@yeoman-environment/lib/environment.js:641:13)
    at Environment.get (/Users/xisizhe/Documents/projects/server/modules/app-generator/server/controllers/node_modules/_yeoman-environment@3.0.1@yeoman-environment/lib/environment.js:598:17)
    at Environment.create (/Users/xisizhe/Documents/projects/server/modules/app-generator/server/controllers/node_modules/_yeoman-environment@3.0.1@yeoman-environment/lib/environment.js:678:35)
    at instantiateAndRun (/Users/xisizhe/Documents/projects/server/modules/app-generator/server/controllers/node_modules/_yeoman-environment@3.0.1@yeoman-environment/lib/environment.js:851:30)
    at Environment.run (/Users/xisizhe/Documents/projects/server/modules/app-generator/server/controllers/node_modules/_yeoman-environment@3.0.1@yeoman-environment/lib/environment.js:873:12)

不知道为什么,我的代码中有构造函数,而且这个构造函数确实执行打印出来了

所以我想知道如何将值传递给代码中的生成

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。