我正在尝试创建一个npm脚本来帮助部署React应用(使用create-react-app),但是我需要在env或json文件上设置S3存储桶url字符串,因此我可以将其用于多个存储桶,而不更改package.json脚本内容。老实说,我到处都看过,但还没有使它工作。
是否有人可以做到这一点,或者我该怎么做?
您可以在节点脚本中通过require读取任何json文件。假设您有以下“ my_settings.json”文件:
{
"bucketName": "test_dev"
}
以及如下所示的节点脚本:
var settings = require("./my_settings.json");
console.log(settings.bucketName);
如果运行它(假设这两个文件都在同一目录中),您将在控制台中看到存储区名称“ 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"
},
scripts / 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"
}
不是最漂亮,但对我有用!