除了process.cwd()之外,是否有其他方法来获取当前项目根目录的路径名。Node是否实现了ruby的属性Rails.root之类的东西。我要找的是稳定可靠的东西。
当前回答
path.dirname(process.mainModule.filename);
其他回答
简单:
require('path').resolve('./')
在app.js中创建一个函数
/*函数获取应用程序根文件夹*/
var appRootFolder = function(dir,level){
var arr = dir.split('\\');
arr.splice(arr.length - level,level);
var rootFolder = arr.join('\\');
return rootFolder;
}
// view engine setup
app.set('views', path.join(appRootFolder(__dirname,1),'views'));
__dirname不是全局变量;它是当前模块的局部值,因此每个文件都有自己的局部值,不同的值。
如果您想要运行进程的根目录,则可能需要使用process.cwd()。
如果希望获得可预测性和可靠性,那么可能需要将设置某个环境变量作为应用程序的要求。你的应用程序寻找MY_APP_HOME(或任何东西),如果它在那里,应用程序存在于该目录,那么一切都很好。如果它是未定义的,或者目录不包含您的应用程序,那么它应该退出,并提示用户创建变量。可以将其设置为安装过程的一部分。
您可以使用process.env.MY_ENV_VARIABLE来读取节点中的环境变量。
process.env上有一个INIT_CWD属性。这就是我目前在我的项目中所做的工作。
const {INIT_CWD} = process.env; // process.env.INIT_CWD
const paths = require(`${INIT_CWD}/config/paths`);
祝你好运…
实际上,我发现也许微不足道的解决方案也是最健壮的: 你只需将以下文件放在你项目的根目录:root-path.js,它有以下代码:
import * as path from 'path'
const projectRootPath = path.resolve(__dirname)
export const rootPath = projectRootPath
推荐文章
- 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代理
- Node -使用NODE_MODULE_VERSION 51根据不同的Node.js版本编译
- RabbitMQ / AMQP:单队列,同一消息的多个消费者?