Javascript 使用json或env文件使npm脚本接收动态值

Javascript 使用json或env文件使npm脚本接收动态值,javascript,npm,create-react-app,Javascript,Npm,Create React App,我试图创建一个npm脚本来帮助部署react应用程序(使用create react app),但我需要在一个env或json文件上设置S3 bucket url字符串,这样我就可以在不更改package.json脚本内容的情况下将其用于多个bucket。老实说,我到处都找过了,但还没成功 有人知道这是否可以做到,或者我如何做到吗?您可以通过节点脚本中的require读取任何json文件。假设您有以下“my_settings.json”文件: 节点脚本如下所示: var settings = re

我试图创建一个npm脚本来帮助部署react应用程序(使用create react app),但我需要在一个env或json文件上设置S3 bucket url字符串,这样我就可以在不更改package.json脚本内容的情况下将其用于多个bucket。老实说,我到处都找过了,但还没成功


有人知道这是否可以做到,或者我如何做到吗?

您可以通过节点脚本中的require读取任何json文件。假设您有以下“my_settings.json”文件:

节点脚本如下所示:

var settings = require("./my_settings.json");

console.log(settings.bucketName);
如果运行它(假设这两个文件位于同一目录中),您将在控制台中看到bucket名称“test_dev”


因此,您将能够获取设置并根据设置组织构建过程。

通过使用外部javascript文件解决:

package.json

"scripts": {
    "deploy:staging": "cross-env NODE_ENV=staging node ./scripts/deploy.js",
    "deploy:prod": "cross-env NODE_ENV=production node ./scripts/deploy.js"
},
脚本/deploy.js

const { spawn } = require('child_process')

const env = require('./env.json')

const ls = spawn(
    `yarn build && aws --profile XXXXXX s3 sync build s3://${
        env[process.env.NODE_ENV]
    }`,
    { shell: true },
)

ls.stdout.on('data', (stdout) => console.log(stdout.toString()))
ls.stderr.on('data', (stderr) => console.log(stderr.toString()))
ls.on('close', (code) => console.log(`Closed ${code}`))
env.json

{
    "staging": "STAGING_URL",
    "production": "PRODUCTION_URL"
}

不是最漂亮的,但对我有用

我需要访问tha package.json文件中的变量,如:“deploy:staging”:“纱线构建:staging&&aws--profile XXXXX s3同步构建s3://$BUCKET\u URL”Hm。。。也许这个软件包可以帮助您:
{
    "staging": "STAGING_URL",
    "production": "PRODUCTION_URL"
}