【问题标题】:App base path from a module in NodeJSNodeJS中模块的应用程序基本路径
【发布时间】:2014-03-05 10:00:13
【问题描述】:

我正在使用 NodeJS 构建一个 Web 应用程序,并且我正在单独的模块中实现我的 API 路由。在我的一条路线中,我正在进行一些文件操作,我需要知道基本应用程序路径。如果我使用__dirname,它当然会给我包含我的模块的目录。

我目前正在使用它来获取基本应用程序路径(假设我知道从基本路径到模块的相对路径):

path.join(__dirname, "../../", myfilename)

有没有比使用../../ 更好的方法?我在 Windows 下运行 Node,所以没有 process.env.PWD 并且我不想成为特定于平台的。

【问题讨论】:

  • 在多个模块中多次/多次使用上面的行是重复且不一致的。在这种情况下,在 static 类(例如 Paths.getBasePath();)中创建 static 函数可能很有用。当您的项目结构发生变化时,您只需要更新上述函数中的相对路径。通过这样的方法,您可以在任何地方使用require('./Paths').getBasePath();,而无需再次使用../../

标签: node.js module path fs


【解决方案1】:

您可以在 app.js 中定义一个全局变量:

global.__basedir = __dirname;

然后你可以在任何地方使用这个全局变量。像这样:

var base_path = __basedir

【讨论】:

  • 我不喜欢这个的是我失去了自动补全功能:(
  • 我看到人们一般不建议使用全局变量。
【解决方案2】:

您可以使用不带参数的path.resolve() 来获取通常是基本应用程序路径的工作目录。如果参数是相对路径,则假定它是相对于当前工作目录的,因此您可以编写

require(path.resolve(myfilename));

在应用根目录中要求您的模块。

【讨论】:

    【解决方案3】:

    使用__dirname 的方法是最可靠的方法。它总是会给你正确的目录。您不必担心 Windows 环境中的 ../../,因为 path.join() 会解决这个问题。

    虽然有一个替代解决方案。您可以使用process.cwd() 返回进程的当前工作目录。如果您从基本应用程序目录执行节点应用程序,该命令可以正常工作。但是,如果你从不同的目录执行你的节点应用程序,比如说它的父目录(例如node yourapp\index.js),那么__dirname 机制会更好地工作。

    我希望这会有所帮助。

    【讨论】:

    • process.cwd() 非常适合在应用程序基路径上运行的应用程序。谢谢! ../../ 有效,但感觉更像是被破解了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多