J'essaie de créer un script npm pour aider à déployer des applications react (en utilisant create-react-app), mais je dois définir la chaîne d'URL du compartiment S3 sur un fichier env ou json, afin de pouvoir l'utiliser pour plusieurs compartiments sans changer le contenu du script package.json. Honnêtement, j'ai regardé partout mais je n'ai pas encore réussi à le faire fonctionner.

Quelqu'un at-il une idée si cela peut être fait, ou comment puis-je le faire?

0
Marcelo 4 nov. 2019 à 22:11

2 réponses

Résolu en utilisant un fichier javascript externe:

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"
}

Pas le plus joli, mais ça marche pour moi!

0
Marcelo 5 nov. 2019 à 18:09

Vous pouvez lire n'importe quel fichier json via require dans votre script de noeud. Supposons que vous ayez le fichier "my_settings.json" suivant:

{
    "bucketName": "test_dev"
}

Et le script de nœud qui ressemble à ceci:

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

console.log(settings.bucketName);

Si vous l'exécutez (en supposant que ces deux fichiers se trouvent dans le même répertoire), vous verrez le nom du compartiment "test_dev" dans la console.

Ainsi, vous pourrez obtenir des paramètres et organiser votre processus de construction en fonction d'eux.

0
Telary 4 nov. 2019 à 19:36