scripts/select-env.js (32 lines of code) (raw):

const path = require('path'); const fs = require('fs'); const shell = require('shelljs'); const { cd, echo, exec } = shell; const rootDir = path.resolve(__dirname, '..'); const env = process.argv[2]; if (!env) { throw new Error('env name should be provided as exclusive argument, e.g. node scripts/select-env webpack-1'); } const envDir = path.resolve(rootDir, `${rootDir}/env/${env}`); // eslint-disable-next-line import/no-dynamic-require const packagesToLink = require(`${envDir}/package.json`).packagesToLink; const envData = { name: env, linkedPackages: [] }; packagesToLink.forEach((packageName) => { const packageDir = `${envDir}/node_modules/${packageName}`; // eslint-disable-next-line import/no-dynamic-require,global-require const version = require(`${packageDir}/package.json`).version; envData.linkedPackages.push(`${packageName}@${version}`); cd(packageDir); exec('yarn unlink || true'); exec('yarn link'); }); cd(rootDir); packagesToLink.forEach(packageName => exec(`yarn link ${packageName} || true`)); const envFileData = JSON.stringify(envData, null, 2); fs.writeFileSync(`${rootDir}/.current-env`, envFileData); echo(` Env "${env}" was selected, linked packages are: - ${envData.linkedPackages.join('\n - ')} Data saved in ${rootDir}/.current-env `);