javascript - 安装带有帮助文件的 Node 模块会导致 'cannot find module' 错误

标签 javascript node.js npm

提前道歉,我确信在一个明显的线程中有一个简单的答案,我只是没能找到/理解它。

给定一个在全局 node_modules/Jimmy/index.js 文件中实现的 Node.js 模块 Jimmy;我将一些“帮助器”函数放入单独的 Helper.js 文件中,全部位于同一目录中。当我运行一个示例程序需要从同一目录运行它时效果很好,但从其他任何地方运行相同的示例程序时,它无法加载支持的 Helper.js 文件:

    Error: Cannot find module 'Helper'

有人可以解释或指出为什么这不起作用以及我应该做什么才能使它起作用吗?

编辑:将其简化以演示问题。包括 Swagger-client 依赖项,以防万一。

Node 模块名为 Jimmy,位于目录 ~/Jimmy 中。

~/Jimmy/index.js中定义的模块类:

var Swagger = require('swagger-client');
var Helper  = require('Helper');
function Jimmy (host, username, password) {
    this._host = host;
    this._hdr = {
        'Authorization': 'Basic ' + new     Buffer(username+':'+password).toString('base64') ,
        'Content-Type': 'application/json'
    };
}
Jimmy.prototype.getEntity = function(entity) {
    return Helper.get(this._host, this._hdr, entity);
}
module.exports =
{
    Jimmy: Jimmy
};

~/Jimmy/Helper.js中定义的模块辅助函数:

var Swagger = require('swagger-client');
function get(host, hdr, entity) {
    var url = 'http://'+host+'/config/' + entity;
    var request = {
        url    : url,
        headers: hdr
    };
    return Swagger.http(request)
        .then( (res) => { return res.body; });
}
module.exports =
{
    get : get
};

以及 ~/test.js 中的示例测试:

var jimmy = require('Jimmy');
var j = new jimmy.Jimmy('192.168.56.151:8080', 'admin', 'admin');
j.getEntity('joey')
    .then( (e) => {
        console.log(JSON.stringify(e, null, 2));
    })
    .catch( (err) => { console.log('ERR: ' + err); });

最佳答案

抱歉,发现我的错误;如果其他人这样做,对于模块内的本地文件,我通过相对路径名引用它来使其工作。

因此,在我的情况下,从我的模块的 index.js 中,我只想要我想要的 Helper.js 的本地版本:

var Helper  = require('./Helper'); // works

而不是:

var Helper  = require('Helper'); // 'not found' error

关于javascript - 安装带有帮助文件的 Node 模块会导致 'cannot find module' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43723826/

相关文章:

javascript - 加载 HTML 元素后执行函数的 Angular 指令

javascript - Vuex 不更新使用 mapState 映射的计算变量

javascript - 当从 Node js 应用程序发生插入时,插入触发器不起作用

javascript - Jasmine IT block 在 'beforeAll' block 之前执行

javascript - Angular.js 和 Node.js 在页面加载时调用 Node

javascript - node.js 依赖列表中的 "^"是什么意思?

javascript - 为什么我不能捕获从 node-postgres 抛出的错误?

javascript - Blaze Spacebars Each - 预览下一个和上一个项目

node.js - 跨环境/dist/index.js :42 unexpected token }

javascript无法访问私有(private)属性