在javascript中使用导出

在javascript中使用导出,javascript,Javascript,我是javascript新手,尝试使用一些生成的代码,遇到了一些关于导出的问题。由于文件1是自动生成的,如果可能的话,我宁愿只编辑文件2 在file1.js中,我有: var exports = function(apiClient) { ... this.apiClient = apiClient || ApiClient.instance; this.listAssets = function(opts, callback) { ... } } 我想

我是javascript新手,尝试使用一些生成的代码,遇到了一些关于导出的问题。由于文件1是自动生成的,如果可能的话,我宁愿只编辑文件2

在file1.js中,我有:

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')