uni.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. #!/usr/bin/env node
  2. // 暂时忽略 cjs 警告
  3. process.env.VITE_CJS_IGNORE_WARNING = true
  4. const { performance } = require('perf_hooks')
  5. global.__vite_start_time = performance.now()
  6. const debugIndex = process.argv.findIndex((arg) => /^(?:-d|--debug)$/.test(arg))
  7. const filterIndex = process.argv.findIndex((arg) =>
  8. /^(?:-f|--filter)$/.test(arg)
  9. )
  10. if (debugIndex > 0) {
  11. let value = process.argv[debugIndex + 1]
  12. if (!value || value.startsWith('-')) {
  13. value = 'vite:*,uni:*'
  14. }
  15. process.env.DEBUG = value
  16. if (filterIndex > 0) {
  17. const filter = process.argv[filterIndex + 1]
  18. if (filter && !filter.startsWith('-')) {
  19. process.env.VITE_DEBUG_FILTER = filter
  20. }
  21. }
  22. }
  23. // uni-cli-shared 引入了 @vue/compiler-core,需要提前设置NODE_ENV,才能保证 @vue/compiler-core 加载的是对应环境的代码
  24. if (
  25. process.argv[2] === 'build' &&
  26. !process.argv.some((arg) => /^(?:-w|--watch)$/.test(arg))
  27. ) {
  28. if (process.env.UNI_COMPILE_TARGET === 'uni_modules') {
  29. if (!process.env.NODE_ENV) {
  30. process.env.NODE_ENV = 'production'
  31. }
  32. } else {
  33. process.env.NODE_ENV = 'production'
  34. }
  35. }
  36. // 临时逻辑
  37. if (process.env.UNI_INPUT_DIR) {
  38. const fs = require('fs')
  39. const path = require('path')
  40. const tscFile = path.resolve(process.env.UNI_INPUT_DIR, 'TSC')
  41. if (fs.existsSync(tscFile)) {
  42. const debugFileStat = fs.statSync(tscFile)
  43. if (debugFileStat.isFile()) {
  44. process.env.UNI_APP_X_TSC = 'true'
  45. }
  46. }
  47. }
  48. function initDebug() {
  49. if (!process.env.DEBUG && process.env.UNI_INPUT_DIR) {
  50. const fs = require('fs')
  51. const path = require('path')
  52. const debugFile = path.resolve(process.env.UNI_INPUT_DIR, 'DEBUG')
  53. if (fs.existsSync(debugFile)) {
  54. const debugFileStat = fs.statSync(debugFile)
  55. if (debugFileStat.isFile()) {
  56. process.env.DEBUG = fs.readFileSync(debugFile, 'utf8').trim()
  57. }
  58. }
  59. }
  60. if (process.env.DEBUG) {
  61. const debug = require('debug')
  62. const mod = require('module')
  63. const { PerformanceObserver } = require('perf_hooks')
  64. const debugRequire = debug('uni:require')
  65. // Monkey patch the require function
  66. mod.Module.prototype.require = performance.timerify(
  67. mod.Module.prototype.require
  68. )
  69. require = performance.timerify(require)
  70. // Activate the observer
  71. const obs = new PerformanceObserver((list) => {
  72. const entries = list.getEntries()
  73. entries.sort((a, b) => b.duration - a.duration).filter(e => e.duration > 20).forEach((entry) => {
  74. debugRequire(entry[0], entry.duration)
  75. })
  76. obs.disconnect()
  77. })
  78. obs.observe({
  79. entryTypes: ['function'],
  80. buffered: true,
  81. })
  82. if (process.env.DEBUG === "*") {
  83. const inspector = require('inspector')
  84. const session = (global.__vite_profile_session = new inspector.Session())
  85. session.connect()
  86. session.post('Profiler.enable', () => {
  87. session.post('Profiler.start', () => {
  88. require('../dist/cli/index.js')
  89. })
  90. })
  91. }
  92. }
  93. }
  94. initDebug()
  95. if (!global.__vite_profile_session) {
  96. require('../dist/cli/index.js')
  97. }