我有一个简单的要求:在我的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文件内容。
谁能给我一个可能解决这个问题的提示吗?
假设您有一个。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"
一个更简单的解决方案是,只需使用bash在线解析env文件并提取所需的变量:
假设您的<代码>。env文件如下所示:
DOMAIN=https://tld.com
"scripts": {
"example": "some-lib --argument --domain $(grep DOMAIN .env | cut -d '=' -f2)"
}
简短回答:没有简单的方法可以跨平台实现这一点,正如您的第二个示例所示,它引用了变量npm\u package\u config。
对于跨平台解决方案,即在*nix和Windows平台上都能成功工作的解决方案,npm脚本使用的默认shell分别是sh
或
cmd
,您需要通过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,还适用于其他浏览器(尤
可以使用FileReader直接读取文本文件 我们为什么需要使用InputStream方法
问题内容: 我无法让npm工作。我的package.json文件有 我在与console.logs相同的文件夹中有一个build.js文件。 当我跑步 我得到错误 如果我移动build.js文件并更改package.json文件以包含一个子文件夹 然后我得到错误 怎么了 我正在复制示例文档。 问题答案: 要么 注意: 您缺少和节点命令 文件夹结构很好: