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 文件的主要内容,如果未能解决你的问题,请参考以下文章