除了process.cwd()之外,是否有其他方法来获取当前项目根目录的路径名。Node是否实现了ruby的属性Rails.root之类的东西。我要找的是稳定可靠的东西。
当前回答
的过程。mainModule自v 14.0.0起已弃用。参考答案时,请使用require。主要部分,其余部分还在。
process.mainModule.paths
.filter(p => !p.includes('node_modules'))
.shift()
获取主模块中的所有路径,并过滤掉带有"node_modules"的路径, 然后获取剩余路径列表中的第一个。意外行为不会抛出错误,只是一个未定义的错误。
对我来说很好,即使在调用ie $ mocha时也是如此。
其他回答
path.dirname(process.mainModule.filename);
尝试从__dirname向上遍历,直到找到一个包。Json,并确定这是你当前文件所属的应用主根目录。
根据Node文档
包。json文件通常位于Node.js项目的根目录。
const fs = require('fs')
const path = require('path')
function getAppRootDir () {
let currentDir = __dirname
while(!fs.existsSync(path.join(currentDir, 'package.json'))) {
currentDir = path.join(currentDir, '..')
}
return currentDir
}
__dirname不是全局变量;它是当前模块的局部值,因此每个文件都有自己的局部值,不同的值。
如果您想要运行进程的根目录,则可能需要使用process.cwd()。
如果希望获得可预测性和可靠性,那么可能需要将设置某个环境变量作为应用程序的要求。你的应用程序寻找MY_APP_HOME(或任何东西),如果它在那里,应用程序存在于该目录,那么一切都很好。如果它是未定义的,或者目录不包含您的应用程序,那么它应该退出,并提示用户创建变量。可以将其设置为安装过程的一部分。
您可以使用process.env.MY_ENV_VARIABLE来读取节点中的环境变量。
在你的主应用文件(例如app.js)开始的地方添加这个:
global.__basedir = __dirname;
这将设置一个全局变量,该变量将始终等同于应用程序的基本目录。像使用其他变量一样使用它:
const yourModule = require(__basedir + '/path/to/module.js');
简单的…
我知道这已经太迟了。 但我们可以通过两个方法获取根URL
1号方法
var path = require('path');
path.dirname(require.main.filename);
2方法
var path = require('path');
path.dirname(process.mainModule.filename);
参考链接:—https://gist.github.com/geekiam/e2e3e0325abd9023d3a3
推荐文章
- 错误:无法找到模块“webpack”
- 如何在C程序中获取当前目录?
- 在node.js中使用async / await文件系统
- NodeJS -用NPM安装错误
- 如何为本地安装npm包设置自定义位置?
- 回调函数来处理管道的完成
- Express函数中的“res”和“req”参数是什么?
- node.js TypeError:路径必须是绝对路径或指定根路径到res.sendFile[解析JSON失败]
- Passport.js -错误:序列化用户到会话失败
- Node.js vs .Net性能
- 从电子应用程序中删除菜单栏
- 如何用node.js实现一个安全的REST API
- 如何处理Node.js中的循环依赖
- 在猫鼬,我如何排序的日期?(node . js)
- 如何在Node.js内进行远程REST调用?旋度吗?