我已经编写了下面的模块,但是导入它时出现了问题。文件(为简化起见而缩写):
我将翻译成如下内容:
但我在控制台中看到了以下错误跟踪。
templates.js
'use strict';
export default class Templates {
constructor (args) {
this.files = [{
name: `${args.name}.js`,
path: 'src/',
content: ''
}];
/* code omitted */
}
};
我将翻译成如下内容:
我尝试这样使用它:
index.js
import Templates from './templates'
const opts = {name: 'app'};
/* code ommited */
console.log('Templates >>', typeof Templates);
console.log('Templates >>', new Templates());
let tmpls = new Templates(opts);
console.log(tmpls.files[0].name);
但我在控制台中看到了以下错误跟踪。
npm ERR! Linux 3.16.0-38-generic
npm ERR! argv "/home/wesleycoder/.nvm/versions/node/v5.1.0/bin/node" "/home/wesleycoder/.nvm/versions/node/v5.1.0/bin/npm" "init"
npm ERR! node v5.1.0
npm ERR! npm v3.3.12
npm ERR! Cannot read property 'name' of undefined
是的,这是一个~/.npm-init
脚本,供需要的人使用。
编辑:感谢@low_ghost提供有用的回答。
我发现我的问题不在于导出和导入类。 实际上,它是关于传递参数给这个类,而不是不传递参数。所以我改变了标题以简洁明了。
我的代码中意图将console.log(new Templates())
没有任何参数。
我试图解决的错误是关于实例化对象并获取文件数组,但我直接从commander.js
库传递参数,传递的参数对于此任务来说是“过度”,因此我通过从commander.js
获取输入并将每个输入分配到空对象的属性中,然后沿着构造函数传递这个对象,这使我可以从readline-sync
获取输入,并从未传递的选项读取输入,使脚本更加完美,之后一切都运行正常。
如果commander.js
有任何选项可以提供传递的选项而不带有额外的库属性,那就太好了。
编辑2:毕竟commander.js
没有用,因为我无法将参数传递给脚本本身的npm init
命令。