Skip to content

Instantly share code, notes, and snippets.

@ValeriiVasin
Last active August 5, 2019 20:04
Show Gist options
  • Save ValeriiVasin/c24435dc2fd0afd13e75674ebdcdc528 to your computer and use it in GitHub Desktop.
Save ValeriiVasin/c24435dc2fd0afd13e75674ebdcdc528 to your computer and use it in GitHub Desktop.
Test npx install
#!/usr/bin/env node
const { spawnSync } = require('child_process');
const fs = require('fs');
const path = require('path');
const packageJsonPath = path.resolve('package.json');
const getPackageJson = () =>
JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
const packagesToRemove = [
// dev deps
'@grpn/itier-webpack',
'@grpn/swagger-ui',
'assertive',
'eslint',
'eslint-config-groupon',
'eslint-plugin-import',
'eslint-plugin-mocha',
'eslint-plugin-node',
'eslint-plugin-prettier',
'grpn-mocha-reporter',
'itier-layout-stubs',
'itier-service-mocks',
'itier-testium-mixins',
'mocha',
'npm-run-all',
'prettier',
'testem',
'testium-driver-wd',
'testium-mocha',
'webpack',
'webpack-cli',
// deps
'semver',
'lead_tracking',
'itier-subscriptions-client',
'itier-submodule-render',
'itier-groupon-v2-users',
'itier-geodetails-v2-client',
'itier-divisions',
'itier-error-page',
'itier-datetime',
'graphql-tag',
'grapefruit',
'gofer',
'express',
'debug',
'csurf',
'cookie-parser',
'coffeescript',
'cluster-master',
'body-parser',
'bluebird',
'@grpn/graphql',
'@grpn/graphql-gapi',
'@grpn/hydration'
];
const packagesToAdd = [
'@grpn/mx-merchant',
'itier-merchant-api-client',
'@grpn/mx-webpack',
'groupon-domain-cookie'
];
const updatePackagesToLatest = () => {
const { dependencies, devDependencies } = getPackageJson();
const packages = Object.keys(dependencies);
const devPackages = Object.keys(devDependencies);
spawnSync(
'npm',
['install', '--save', ...packages.map(package => `${package}@latest`)],
{ stdio: 'inherit' }
);
spawnSync(
'npm',
[
'install',
'--save-dev',
...devPackages.map(package => `${package}@latest`)
],
{ stdio: 'inherit' }
);
};
const filterAllowedScripts = () => {
const packageJson = getPackageJson();
const allowedScripts = new Set(['start', 'assets', 'dist-assets']);
const result = {};
for (const [name, value] of Object.entries(packageJson.scripts)) {
if (!allowedScripts.has(name)) {
continue;
}
result[name] = value;
}
packageJson.scripts = result;
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
};
filterAllowedScripts();
spawnSync('npm', ['remove', ...packagesToRemove], { stdio: 'inherit' });
updatePackagesToLatest();
spawnSync('npm', ['install', ...packagesToAdd], { stdio: 'inherit' });
{
"name": "fix-itier",
"version": "1.0.0",
"bin": "./index.js"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment