example-npm.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. const path = require('path')
  2. const globby = require('globby')
  3. const exec = require('./lib/shell')
  4. const workspaceUtil = require('./lib/workspace-util')
  5. let rootDir = path.resolve(__dirname, '..')
  6. let exDir = path.join(rootDir, 'example-projects')
  7. let projName = process.argv[2]
  8. let runCmd = process.argv[3]
  9. if (!projName) {
  10. console.error('Must specify an example-project name')
  11. process.exit(1)
  12. }
  13. let projDir = path.join(exDir, projName)
  14. let fcPkgRootDir = path.join(projDir, 'node_modules', '@fullcalendar')
  15. function resetFcPkgs(pkgNameToLocationHash) {
  16. let fcPkgShortNames = globby.sync('*', { cwd: fcPkgRootDir, onlyFiles: false })
  17. for (let fcPkgShortName of fcPkgShortNames) {
  18. exec.sync(
  19. [ 'rm', '-rf', fcPkgShortName ],
  20. { cwd: fcPkgRootDir, exitOnError: true }
  21. )
  22. if (pkgNameToLocationHash) {
  23. let fcPkgName = `@fullcalendar/${fcPkgShortName}`
  24. let fcPkgLocation = pkgNameToLocationHash[fcPkgName]
  25. if (!fcPkgLocation) {
  26. throw new Error(`Could not find location for package ${fcPkgName}`)
  27. }
  28. exec.sync(
  29. [ 'cp', '-r', path.join(rootDir, fcPkgLocation), fcPkgShortName ],
  30. { cwd: fcPkgRootDir, exitOnError: true }
  31. )
  32. }
  33. }
  34. }
  35. resetFcPkgs() // deletes all @fullcalendar/* packages
  36. exec.sync(
  37. 'npm install',
  38. { cwd: projDir, exitOnError: true, live: true, env: {
  39. ...process.env,
  40. NODE_OPTIONS: '' // prevent yarn from injecting pnp script
  41. } }
  42. )
  43. resetFcPkgs(workspaceUtil.getPkgNameToLocationHash())
  44. if (runCmd) {
  45. exec.sync(
  46. [ 'npm', 'run', runCmd ],
  47. { cwd: projDir, exitOnError: true, live: true, env: {
  48. ...process.env,
  49. NODE_OPTIONS: '' // prevent yarn from injecting pnp script
  50. } }
  51. )
  52. }