preserve.ts 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. // 是否需要更新依赖,防止package.json更新了依赖,其他人获取代码后没有install
  2. import path from 'path';
  3. import fs from 'fs-extra';
  4. import { isEqual } from 'lodash';
  5. import chalk from 'chalk';
  6. import { sh } from 'tasksfile';
  7. const resolve = (dir: string) => {
  8. return path.resolve(process.cwd(), dir);
  9. };
  10. let NEED_INSTALL = false;
  11. fs.mkdirp(resolve('build/.cache'));
  12. function checkPkgUpdate() {
  13. const pkg = require('../../package.json');
  14. const { dependencies, devDependencies } = pkg;
  15. const depsFile = resolve('build/.cache/deps.json');
  16. if (!fs.pathExistsSync(depsFile)) {
  17. NEED_INSTALL = true;
  18. return;
  19. }
  20. const depsJson = require('../.cache/deps.json');
  21. if (!isEqual(depsJson, { dependencies, devDependencies })) {
  22. NEED_INSTALL = true;
  23. }
  24. }
  25. checkPkgUpdate();
  26. (async () => {
  27. if (NEED_INSTALL) {
  28. console.log(
  29. chalk.blue.bold('**************** ') +
  30. chalk.red.bold('检测到依赖变化,正在安装依赖(Tip: 项目首次运行也会执行)!') +
  31. chalk.blue.bold(' ****************')
  32. );
  33. try {
  34. // 从代码执行貌似不会自动读取.npmrc 所以手动加上源地址
  35. // await run('yarn install --registry=https://registry.npm.taobao.org ', {
  36. await sh('yarn install ', {
  37. async: true,
  38. nopipe: true,
  39. });
  40. console.log(
  41. chalk.blue.bold('**************** ') +
  42. chalk.green.bold('依赖安装成功,正在运行!') +
  43. chalk.blue.bold(' ****************')
  44. );
  45. const pkg = require('../../package.json');
  46. const { dependencies, devDependencies } = pkg;
  47. const depsFile = resolve('build/.cache/deps.json');
  48. const deps = { dependencies, devDependencies };
  49. if (!fs.pathExistsSync(depsFile)) {
  50. fs.writeFileSync(depsFile, JSON.stringify(deps));
  51. } else {
  52. const depsFile = resolve('build/.cache/deps.json');
  53. const depsJson = require('../.cache/deps.json');
  54. if (!isEqual(depsJson, deps)) {
  55. fs.writeFileSync(depsFile, JSON.stringify(deps));
  56. }
  57. }
  58. } catch (error) {}
  59. }
  60. })();