从运行的node.js应用程序确定项目根目录

是否有比process.cwd()确定正在运行的node.js进程的根目录更好的方法类似Rails.root,但适用于Node.js。我正在寻找尽可能可预测和可靠的东西。

小胖A2020/03/19 09:34:31
path.dirname(process.mainModule.filename);
凯LEY2020/03/19 09:34:31

它对我有用

process.env.PWD
神无JinJin2020/03/19 09:34:31

只需使用:

 path.resolve("./") ... output is your project root directory
村村AL2020/03/19 09:34:31

这样可以:

path.join(...process.argv[1].split(/\/|\\/).slice(0, -1))
小小Green2020/03/19 09:34:31

如果您想从正在运行的node.js应用程序确定项目根目录,则也可以。

process.mainModule.path
西门樱Eva2020/03/19 09:34:31

上有一个INIT_CWD属性process.env这就是我目前在我的项目中使用的东西。

const {INIT_CWD} = process.env; // process.env.INIT_CWD 
const paths = require(`${INIT_CWD}/config/paths`);

祝好运...

JinJin乐2020/03/19 09:34:30

也许您可以尝试从向上遍历,__filename直到找到package.json,然后确定这是当前文件所属的主目录。

NearSamHarry2020/03/19 09:34:30

只需将此行添加到root中的模块中,通常就是app.js

global.__basedir = __dirname;

然后,_basedir将可用于所有模块。

逆天西门2020/03/19 09:34:30

1-在项目根目录中创建一个文件,将其称为settings.js

2-在此文件内添加此代码

module.exports = {
    POST_MAX_SIZE : 40 , //MB
    UPLOAD_MAX_FILE_SIZE: 40, //MB
    PROJECT_DIR : __dirname
};

3-在node_modules内部创建一个名为“ settings”的新模块,并在模块index.js内部编写以下代码:

module.exports = require("../../settings");

4-以及您希望项目目录仅使用的任何时间

var settings = require("settings");
settings.PROJECT_DIR; 

这样,您将拥有与此文件相关的所有项目目录;)

Near西里泡芙2020/03/19 09:34:30

__dirname不是全球性的 它是当前模块的本地文件,因此每个文件都有其自己的本地不同值。

如果要运行的进程的根目录,可能要使用process.cwd()

如果需要可预测性和可靠性,则可能需要使您的应用程序要求设置某个环境变量。您的应用程序会查找MY_APP_HOME(或其他)内容,如果存在,并且该应用程序存在于该目录中,则一切正常。如果未定义或目录不包含您的应用程序,则它应退出并出现错误提示用户创建变量。可以将其设置为安装过程的一部分。

您可以使用诸如此类读取节点中的环境变量process.env.MY_ENV_VARIABLE