除了process.cwd()之外,是否有其他方法来获取当前项目根目录的路径名。Node是否实现了ruby的属性Rails.root之类的东西。我要找的是稳定可靠的东西。
当前回答
只使用:
path.resolve("./") ... output is your project root directory
其他回答
就像在根目录中添加这一行到你的模块一样简单,通常是app.js或app.ts。
global.__basedir = __dirname;
然后所有模块都可以访问_basedir。
注意:对于typescript实现,遵循上面的步骤,然后你将能够使用global.__basedir使用根目录路径
实际上,我发现也许微不足道的解决方案也是最健壮的: 你只需将以下文件放在你项目的根目录:root-path.js,它有以下代码:
import * as path from 'path'
const projectRootPath = path.resolve(__dirname)
export const rootPath = projectRootPath
这对我很有用
process.env.PWD
我发现这对我来说是一致的,即使应用程序是从子文件夹中调用的,因为它可以与一些测试框架,如Mocha:
process.mainModule.paths[0].split('node_modules')[0].slice(0, -1);
为什么有效:
在运行时,节点创建所有加载文件的完整路径的注册表。模块首先加载,因此位于注册表的顶部。通过选择注册表的第一个元素并返回'node_modules'目录之前的路径,我们可以确定应用程序的根目录。
它只有一行代码,但为了简单起见(我的),我把它黑盒到一个NPM模块:
https://www.npmjs.com/package/node-root.pddivine
享受吧!
编辑:
的过程。mainModule从v14.0.0开始已弃用
使用要求。主要:
require.main.paths [0] .split(“node_modules”)[0]。片(0,1);
的过程。mainModule自v 14.0.0起已弃用。参考答案时,请使用require。主要部分,其余部分还在。
process.mainModule.paths
.filter(p => !p.includes('node_modules'))
.shift()
获取主模块中的所有路径,并过滤掉带有"node_modules"的路径, 然后获取剩余路径列表中的第一个。意外行为不会抛出错误,只是一个未定义的错误。
对我来说很好,即使在调用ie $ mocha时也是如此。
推荐文章
- ReferenceError: description没有定义NodeJs
- 将一个二进制的NodeJS Buffer转换为JavaScript的ArrayBuffer
- AngularJS只适用于单页应用程序吗?
- 如何在vue-cli项目中更改端口号
- 同步和异步编程(在node.js中)的区别是什么?
- 如何编辑通过npm安装的节点模块?
- “node_modules”文件夹应该包含在git存储库中吗
- 使用package.json在全局和本地安装依赖项
- this.libOptions.parse不是一个函数
- 对嵌套文件夹运行npm install的最好方法是什么?
- 节点Multer异常字段
- 很好的初学者教程socket.io?
- CALL_AND_RETRY_LAST分配失败-进程内存不足
- 在Ubuntu上安装Node.js
- 使用express.js代理