在javascript中使用导出
我是javascript新手,尝试使用一些生成的代码,遇到了一些关于导出的问题。由于文件1是自动生成的,如果可能的话,我宁愿只编辑文件2 在file1.js中,我有:在javascript中使用导出,javascript,Javascript,我是javascript新手,尝试使用一些生成的代码,遇到了一些关于导出的问题。由于文件1是自动生成的,如果可能的话,我宁愿只编辑文件2 在file1.js中,我有: var exports = function(apiClient) { ... this.apiClient = apiClient || ApiClient.instance; this.listAssets = function(opts, callback) { ... } } 我想
var exports = function(apiClient) {
...
this.apiClient = apiClient || ApiClient.instance;
this.listAssets = function(opts, callback) {
...
}
}
我想在file2.js中使用函数listasets
。我尝试在file2.js中执行以下操作:
var myInstance = require('../../jsCode/src/api/file1');
然后调用
myInstance.getAssets()
,但这显然是错误的。我想我错过了一些非常明显的东西,但环顾四周后,我仍然无法找到它。任何指示都将不胜感激 您可以使用以下解决方案:
module.exports = function()
使用
模块。导出:
module.exports = function(apiClient) {
...
this.apiClient = apiClient || ApiClient.instance;
this.listAssets = function(opts, callback) {
...
}
// now return an object containing the API you need in your import
return {
apiClient: this.apiClient,
listAssets: this.listAssets
};
}
然后按照您的建议要求使用该模块:
var myInstance = require('../../jsCode/src/api/file1')(apiClient);
这称为CommonJS,是一组关于如何处理模块导出和导入的协议。请记住,导入的函数需要作为参数传递给apiClient
。检查-基本上它说您可以只使用导出
,但不能像使用var
那样重新分配它。或者只使用完整的module.exports
。通读一遍,如果我想保留var导出部分(最好不要更改自动生成的代码),我可以在哪里使用module.exports?然后你可以在file1.js
的末尾执行module.exports=exports
,我在哪里使用它?在file2中,module.exports=function(apiClient){…this.apiClient=apiClient | | | apiClient.instance;this.listAssets=function(opts,callback){…}的更改并不理想,因为我希望不更改file1(其自动生成的代码),但即使使用此修复,我仍然无法调用此函数中定义的方法。有没有办法通过更改file2中的过程来实现这一点?很有趣-我假设我的问题是正在传递的ApicClient。require语句之后的(apiClient)做什么?它以apiClient
作为参数执行导入的函数。如果file1已经需要apiClient并使用它,在file2中导入file1时,我是否需要实例化一个新的apiClient实例,或者这将由file1处理?您访问ApicClient的方式似乎有点不寻常。您不能只需要文件1中的apiClient吗?由于file1中的模块导出其apiClient,因此您可以在从file1导入的fileX中使用它。file1前面的行是module.exports=factory(require('../apiClient')