当前位置: 首页 > 知识库问答 >
问题:

npm脚本:读取。env文件

焦信鸥
2023-03-14

我有一个简单的要求:在我的npm脚本包中。json文件我有一行:

json prettyprint-override">{
    "scripts": {
        "example": "some-lib --argument --domain \"https://tld.com\""
    }
}

现在我想把“域”分解出来。

首先尝试使用$npm_package_config,它有效:

{
    "config": {
        "domain": "https://tld.com"
    },
    "scripts": {
        "example": "some-lib --argument --domain \"$npm_package_config_domain\""
    }
}

但我想从本地加载域。env文件。

我没有找到任何解决方案来读取命令行上npm脚本中的env文件内容。

谁能给我一个可能解决这个问题的提示吗?

共有3个答案

魏安宁
2023-03-14

假设您有一个。env文件如下:

DOMAIN="https://tld.com"

然后,您可以在命令中使用源代码,如下所示:

{
    // ...
    "scripts": {
        "example": "source .env && some-lib --argument --domain $DOMAIN"
    }
}

默认情况下,这在Windows中不起作用,但如果安装了Git Bash,则可以配置npm使用它运行命令,例如(从这里):

npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"

翟默
2023-03-14

一个更简单的解决方案是,只需使用bash在线解析env文件并提取所需的变量:

假设您的<代码>。env文件如下所示:

DOMAIN=https://tld.com
"scripts": {
  "example": "some-lib --argument --domain $(grep DOMAIN .env | cut -d '=' -f2)"
} 
朱俊雅
2023-03-14

简短回答:没有简单的方法可以跨平台实现这一点,正如您的第二个示例所示,它引用了变量npm\u package\u config。

对于跨平台解决方案,即在*nix和Windows平台上都能成功工作的解决方案,npm脚本使用的默认shell分别是shcmd,您需要通过nodejs帮助脚本执行命令(即当前在npm脚本中定义的命令)。基本上,您的nodejs脚本需要:

  • 利用dotenv包加载。env文件

然后可以通过您的npm-script调用nodejs助手脚本。

下面介绍如何实现跨平台运行的解决方案。

首先,假设我们有一个。env文件位于项目目录的根目录中。<代码>。env文件包含以下条目:

DOMAIN=https://tld.com

以下nodejs脚本利用dotenv包从加载环境变量。env文件。我们需要安装它。要对项目目录执行此操作,请运行以下命令:

npm i -D dotenv

接下来创建一个nodejs脚本,如下所示。让我们将文件命名为某个lib cmd。js并将其保存在项目目录的根目录中:

// Requirements...
require('dotenv').config();
const execSync = require('child_process').execSync;
const path = require("path");

/**
 * Creates a path to an executable in the node_modules/.bin directory. Each
 * path segment is joined with the appropriate platform-specific separator as
 * a delimiter.
 * @param {String} cmd The name of the executable.
 * @returns {String} The path to the executable.
 */
function getBinFile(cmd) {
  return path.join('node_modules', '.bin', cmd);
}

// Execute the command...
execSync(`${getBinFile('some-lib')} --argument --domain ${process.env.DOMAIN}`, { stdio: [0, 1, 2] });

备注:

>

  • 如果您的. env文件没有与some-lib-cmd.js一起驻留在项目目录的根目录中,那么您可以使用dotenv的path选项来定义指向. env文件位置的自定义路径。例如:

    require('dotenv').config({ path: 'path/to/another/folder/' })
    

    要从nodejs脚本中引用域变量,我们使用过程。env,即过程。环境。域

    在package.json的脚本部分中定义以下脚本:

    "scripts": {
      "example": "node some-lib-cmd"
    }
    

    注意:如果您选择保存一些lib cmd。js,即不在项目目录的根目录中,然后根据需要在示例脚本中重新定义路径。例如:

    "scripts": {
      "example": "node path/to/some/folder/some-lib-cmd"
    }
    

  •  类似资料:
    • 为了帮助你消除开发过程中的冗余任务,请注意一些可用的 NPM 脚本。以下命令应该运行在项目的根目录下。当然,你可以使用 yarn run <command> 的方式运行下列任何命令。 npm run build 为了产品和打包来构建你的应用程序。更多信息可以在 构建你的应用程序 部分找到。 npm run dev 在开发环境中运行程序 npm run lint 静态分析所有在 src/ 和 tes

    • 问题内容: 我是Jenkins和groovy脚本的新手,我想读取一个.txt文件,该文件位于其中一个作业的工作空间中。我正在尝试这样做: 但是会导致以下错误: groovy.lang.MissingMethodException:方法的无签名:hudson.FilePath.readFileFromWorkspace()适用于参数类型:(java.lang.String)值:[file.txt]

    • 问题内容: 我想使用Groovy插件添加一个Build步骤来读取文件并根据文件内容触发构建失败。 如何在groovy插件中注入工作区文件路径? 问题答案: 根据您的评论,使用 Text-finder 插件会更好。 它允许在文件以及控制台中搜索正则表达式,然后设置构建或找到构建。 对于Groovy,可以使用以下命令来访问环境变量:

    • 我试图通过创建一个函数来编写一个简单的文本文件阅读器,该函数接受文件的路径并将每行文本转换为char数组,但它不起作用。 这里出了什么问题? 从以前的修订版更改了一点代码后,这似乎仍然不起作用,现在它给我一个异常101。 我在Firefox上测试过这个功能,它可以工作,但在Google Chrome上它就是不工作,它一直给我一个异常101。我如何让它不仅适用于Firefox,还适用于其他浏览器(尤

    • 问题内容: 我无法让npm工作。我的package.json文件有 我在与console.logs相同的文件夹中有一个build.js文件。 当我跑步 我得到错误 如果我移动build.js文件并更改package.json文件以包含一个子文件夹 然后我得到错误 怎么了 我正在复制示例文档。 问题答案: 要么 注意: 您缺少和节点命令 文件夹结构很好:

    • 我无法让npm工作。我的包裹。json文件已被删除 我有一个身材。js文件位于与控制台相同的文件夹中。日志。 当我奔跑时 我得到了错误 如果我移动建筑。js文件并更改我的包。json文件有一个子文件夹 那我就知道错误了 出什么问题了?我正在复制示例留档。