为什么将选项值从 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 (将#修改为@)