Node.js 不能要求同一目录中的 .js 文件

Posted

技术标签:

【中文标题】Node.js 不能要求同一目录中的 .js 文件【英文标题】:Node.js cannot require a .js file in the same directory 【发布时间】:2014-12-06 08:10:51 【问题描述】:

我有一个带有 main.js 的 node-webkit 项目。在最顶端,我有

var updater = require("./updater.js");

我在与main.js 相同的目录中有一个名为updater.js 的文件。当我运行应用程序时,我收到错误

Uncaught Error: Cannot find module './updater.js' 

updater.js 里面只有一行:

module.exports = "Hello!";

我不知道为什么它不能要求该文件。我见过另一个项目做同样的事情。我可以 require 常规 npm 模块来自同一个 main.js

【问题讨论】:

你有updater.js的读取权限吗? 你是如何启动节点的?您是否通过键入node main.js 直接在此目录中启动节点?如果你使用了一些助手,cwd 可能已经改变了。 您是在main.js 所在的目录中使用node main,当它抛出此错误时,还是您将main.js 作为模块加载到不同的脚本中? 试试 var updater = require("./updater"); 【参考方案1】:

这是因为,当您使用 node-webkit 运行您的应用程序(main.js)时,根(工作)目录是 index.html 所在的位置,因此“./”指的是该目录而不是其中的目录您从中请求模块的文件在其中。

您可以使用resolve method in 'path' node module 轻松解决此问题,并将其输出提供给工作文件中的 require 方法

只需执行以下操作:

var path = require('path');
var updater = require( path.resolve( __dirname, "./updater.js" ) );

编辑:关于全局节点对象“__dirname”(和其他)的信息可以通过here找到。

【讨论】:

文档链接加 1 是否有更简洁的方式来要求单个文件(不需要 2 行、路径、path.resolve、__dirname、相对路径等)? 虽然这个解决方案确实有效,但 './'(我错过了)似乎实际上可以像现在预期的那样工作,并且不再需要 path.resolve( __dirname...

以上是关于Node.js 不能要求同一目录中的 .js 文件的主要内容,如果未能解决你的问题,请参考以下文章

node.js 项目中的 index.js 用于啥?

如何使用node.js更改同一文件夹中的所有文件和文件夹权限

如何使用备用配置从同一文件夹运行第二个node.js服务器

Node.js 需要一个相对于包根目录的文件

如何从 Node.js 中的 URL 请求

在 Node.js 中,我如何知道 `this` 模块的路径?