我正在使用节点v0.12.5
和nwjs,我已经在我的项目中定义了自己的自定义模块,这样我就可以模块化我的项目(显然)。
我正在尝试从我项目中的另一个模块调用我的模块,但每次我尝试要求它时都会收到错误could not find module 'uploader'
。
我的上传器模块目前非常简单,如下所示:
function ping_server(dns, cb) {
require('dns').lookup(dns, function(err) {
if (err && err.code == "ENOTFOUND") {
cb(false);
} else {
cb(true);
}
})
}
function upload_files()
{
}
module.exports.ping_server = ping_server;
module.exports.upload_files = upload_files;
如果在测试设备有互联网连接时可以ping通文件,那么它将用于递归推送文件到请求的服务器。
我相信我已使用module.exports
语法正确导出了这些方法,然后我尝试使用以下方法将此模块包含在test.js
文件中:
var uploader = require('uploader');
我也试过
var uploader = require('uploader.js');
但我相信如果指定了uploader.js
,节点会自动查找uploader
。
我的应用的文件层次结构如下:
package.json
public
|-> lib
|-> test.js
|-> uploader.js
|-> css
|-> img
我唯一想到的是,我听说node会尝试获取要包含在应用程序根目录下的node_modules文件夹,这可能导致节点无法找到它吗?如果没有,为什么节点不能从test.js看到我的文件,因为它们存在于同一目录中?
更新对于混淆,我们也尝试使用require('./uploader')
,但我仍然收到错误:Uncaught Error: Cannot find module './uploader'
。
更新2 我通常完全反对使用图片来传达SO上的代码问题,但我认为这将极大地帮助解决这个问题:
这里很清楚test.js和uploader.js位于同一位置
答案 0 :(得分:1)
如果您未向require()
传递路径(相对或绝对路径),则会对传入的名称执行模块查找。
将您的require('uploader')
更改为require('./uploader')
或require(__dirname + '/uploader')
。
答案 1 :(得分:0)
要加载本地模块(即不是来自node_modules
的模块),您需要在路径前加./
。 https://nodejs.org/api/modules.html#modules_modules
所以在你的情况下,它将是var uploader = require('./uploader');
答案 2 :(得分:0)
这个问题源于使用Node Webkit而不是直接节点,如其文档中所述,所有模块都将来自项目根目录下的node_modules目录。
任何内部非C ++库都应放在node_modules目录中,以便Node webkit到find them。
因此,为了解决这个问题,我只在项目的根目录(app和public之外)添加了一个node_modules
目录,并将uploader.js
文件放在那里。现在,当我致电require('uploader')
时,它按预期工作。
答案 3 :(得分:0)
如果在Mac上进行开发,请检查文件系统是否区分大小写。可能是所需的文件名大写错误。