utils.js 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. "use strict";
  2. var __importDefault = (this && this.__importDefault) || function (mod) {
  3. return (mod && mod.__esModule) ? mod : { "default": mod };
  4. };
  5. Object.defineProperty(exports, "__esModule", { value: true });
  6. exports.createResolveErrorMsg = exports.parseImporter = exports.resolveAppVue = exports.isAppVue = exports.installDepTips = exports.resolveSourceMapPath = exports.pathToGlob = exports.normalizeParsePlugins = exports.normalizeMiniProgramFilename = exports.normalizeNodeModules = exports.removeExt = exports.normalizePagePath = exports.normalizeIdentifier = exports.checkElementNodeTag = exports.normalizePath = exports.isWindows = exports.isRunningWithYarnPnp = exports.isArray = exports.capitalize = exports.camelize = exports.version = exports.hash = void 0;
  7. const fs_1 = __importDefault(require("fs"));
  8. const os_1 = __importDefault(require("os"));
  9. const path_1 = __importDefault(require("path"));
  10. const picocolors_1 = __importDefault(require("picocolors"));
  11. const shared_1 = require("@vue/shared");
  12. var hash_sum_1 = require("hash-sum");
  13. Object.defineProperty(exports, "hash", { enumerable: true, get: function () { return __importDefault(hash_sum_1).default; } });
  14. const constants_1 = require("./constants");
  15. const platform_1 = require("./platform");
  16. const hbx_1 = require("./hbx");
  17. exports.version = require('../package.json').version;
  18. // 专为 uts.ts 服务
  19. var shared_2 = require("@vue/shared");
  20. Object.defineProperty(exports, "camelize", { enumerable: true, get: function () { return shared_2.camelize; } });
  21. Object.defineProperty(exports, "capitalize", { enumerable: true, get: function () { return shared_2.capitalize; } });
  22. Object.defineProperty(exports, "isArray", { enumerable: true, get: function () { return shared_2.isArray; } });
  23. try {
  24. exports.isRunningWithYarnPnp = Boolean(require('pnpapi'));
  25. }
  26. catch { }
  27. exports.isWindows = os_1.default.platform() === 'win32';
  28. function normalizePath(id) {
  29. return exports.isWindows ? id.replace(/\\/g, '/') : id;
  30. }
  31. exports.normalizePath = normalizePath;
  32. function checkElementNodeTag(node, tag) {
  33. return !!node && node.type === 1 /* NodeTypes.ELEMENT */ && node.tag === tag;
  34. }
  35. exports.checkElementNodeTag = checkElementNodeTag;
  36. function normalizeIdentifier(str) {
  37. return (0, shared_1.capitalize)((0, shared_1.camelize)(str.replace(/\//g, '-')));
  38. }
  39. exports.normalizeIdentifier = normalizeIdentifier;
  40. function normalizePagePath(pagePath, platform) {
  41. const absolutePagePath = path_1.default.resolve(process.env.UNI_INPUT_DIR, pagePath);
  42. const isX = process.env.UNI_APP_X === 'true';
  43. let extensions = isX ? constants_1.X_PAGE_EXTNAME : constants_1.PAGE_EXTNAME;
  44. if (platform === 'app') {
  45. extensions = isX ? constants_1.X_PAGE_EXTNAME_APP : constants_1.PAGE_EXTNAME_APP;
  46. }
  47. for (let i = 0; i < extensions.length; i++) {
  48. const extname = extensions[i];
  49. if (fs_1.default.existsSync(absolutePagePath + extname)) {
  50. return pagePath + extname;
  51. }
  52. }
  53. console.error(`${pagePath} not found`);
  54. }
  55. exports.normalizePagePath = normalizePagePath;
  56. function removeExt(str) {
  57. return str.split('?')[0].replace(/\.\w+$/g, '');
  58. }
  59. exports.removeExt = removeExt;
  60. const NODE_MODULES_REGEX = /(\.\.\/)?node_modules/g;
  61. function normalizeNodeModules(str) {
  62. str = normalizePath(str).replace(NODE_MODULES_REGEX, 'node-modules');
  63. // HBuilderX 内置模块路径转换
  64. str = str.replace(/.*\/plugins\/uniapp-cli-vite\/node[-_]modules/, 'node-modules');
  65. if (!(0, hbx_1.isInHBuilderX)()) {
  66. // 内部测试
  67. if (str.includes('uni-app-next/packages/')) {
  68. str = str.replace(/.*\/uni-app-next\/packages\//, 'node-modules/@dcloudio/');
  69. }
  70. }
  71. if (process.env.UNI_PLATFORM === 'mp-alipay') {
  72. str = str.replace('node-modules/@', 'node-modules/npm-scope-');
  73. }
  74. return str;
  75. }
  76. exports.normalizeNodeModules = normalizeNodeModules;
  77. function normalizeMiniProgramFilename(filename, inputDir) {
  78. if (!inputDir || !path_1.default.isAbsolute(filename)) {
  79. return normalizeNodeModules(filename);
  80. }
  81. return normalizeNodeModules(path_1.default.relative(inputDir, filename));
  82. }
  83. exports.normalizeMiniProgramFilename = normalizeMiniProgramFilename;
  84. function normalizeParsePlugins(importer, babelParserPlugins) {
  85. const isTS = constants_1.EXTNAME_TS_RE.test(importer.split('?')[0]);
  86. const plugins = [];
  87. if (isTS) {
  88. plugins.push('jsx');
  89. }
  90. if (babelParserPlugins)
  91. plugins.push(...babelParserPlugins);
  92. if (isTS)
  93. plugins.push('typescript', 'decorators-legacy');
  94. return plugins;
  95. }
  96. exports.normalizeParsePlugins = normalizeParsePlugins;
  97. function pathToGlob(pathString, glob, options = {}) {
  98. const isWindows = 'windows' in options ? options.windows : /^win/.test(process.platform);
  99. const useEscape = options.escape;
  100. const str = isWindows ? pathString.replace(/\\/g, '/') : pathString;
  101. let safeStr = str.replace(/[\\*?[\]{}()!]/g, isWindows || !useEscape ? '[$&]' : '\\$&');
  102. return path_1.default.posix.join(safeStr, glob);
  103. }
  104. exports.pathToGlob = pathToGlob;
  105. function resolveSourceMapPath(outputDir, platform) {
  106. return path_1.default.resolve(outputDir || process.env.UNI_OUTPUT_DIR, '../.sourcemap/' + (platform || (0, platform_1.getPlatformDir)()));
  107. }
  108. exports.resolveSourceMapPath = resolveSourceMapPath;
  109. function hasProjectYarn(cwd) {
  110. return fs_1.default.existsSync(path_1.default.join(cwd, 'yarn.lock'));
  111. }
  112. function hasProjectPnpm(cwd) {
  113. return fs_1.default.existsSync(path_1.default.join(cwd, 'pnpm-lock.yaml'));
  114. }
  115. function getInstallCommand(cwd) {
  116. return hasProjectYarn(cwd)
  117. ? 'yarn add'
  118. : hasProjectPnpm(cwd)
  119. ? 'pnpm i'
  120. : 'npm i';
  121. }
  122. function installDepTips(type, module, version) {
  123. return `Cannot find module: ${module}
  124. Please run \`${picocolors_1.default.cyan(`${getInstallCommand(process.cwd())} ${module + (version ? '@' + version : '')}${type === 'devDependencies' ? ' -D' : ''}`)}\` and try again.`;
  125. }
  126. exports.installDepTips = installDepTips;
  127. function isAppVue(filename) {
  128. return filename.endsWith('App.vue') || filename.endsWith('App.uvue');
  129. }
  130. exports.isAppVue = isAppVue;
  131. function resolveAppVue(inputDir) {
  132. const appUVue = path_1.default.resolve(inputDir, 'App.uvue');
  133. if (fs_1.default.existsSync(appUVue)) {
  134. return normalizePath(appUVue);
  135. }
  136. return normalizePath(path_1.default.resolve(inputDir, 'App.vue'));
  137. }
  138. exports.resolveAppVue = resolveAppVue;
  139. function parseImporter(importer) {
  140. importer = importer.split('?')[0];
  141. if (path_1.default.isAbsolute(importer)) {
  142. return normalizePath(path_1.default.relative(process.env.UNI_INPUT_DIR, importer));
  143. }
  144. return importer;
  145. }
  146. exports.parseImporter = parseImporter;
  147. function createResolveErrorMsg(source, importer) {
  148. return `Could not resolve "${source}" from "${parseImporter(importer)}"`;
  149. }
  150. exports.createResolveErrorMsg = createResolveErrorMsg;