Skip to content

Commit

Permalink
fix(uts): 修复 vue2 下 uts 插件 sourcemap 不生效
Browse files Browse the repository at this point in the history
  • Loading branch information
fxy060608 committed Oct 25, 2023
1 parent e66b701 commit cbb2397
Show file tree
Hide file tree
Showing 9 changed files with 140 additions and 27 deletions.
2 changes: 1 addition & 1 deletion .eslintignore
Original file line number Diff line number Diff line change
Expand Up @@ -43,5 +43,5 @@ packages/uni-cli-shared/components/ad-fullscreen-video.vue
packages/uni-cli-shared/components/ad-interactive.vue
packages/uni-cli-shared/components/ad-interstitial.vue
packages/uni-cli-shared/components/ad-rewarded-video.vue
packages/uni-cli-shared/lib/uni_modules/uni_modules.js
packages/uni-cli-shared/lib/uts/uni_modules.js
packages/uni-cli-shared/lib/uts/uts.js
4 changes: 2 additions & 2 deletions packages/uni-cli-shared/lib/uts/resolver.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
const path = require('path')
const {
resolveUtsModule
resolveUTSModule
} = require('./uts')
class UTSResolverPlugin {
apply (resolver) {
Expand All @@ -12,7 +12,7 @@ class UTSResolverPlugin {
utsModulePath = path.resolve(request.path, request.request)
}
if (utsModulePath) {
const utsModule = resolveUtsModule(utsModulePath)
const utsModule = resolveUTSModule(utsModulePath)
if (utsModule) {
if (process.env.UNI_PLATFORM === 'app-plus') {
request.request = utsModule + '/package.json?uts-proxy'
Expand Down
9 changes: 7 additions & 2 deletions packages/uni-cli-shared/lib/uts/utils.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
const fs = require('fs')
const path = require('path')
const {
normalizePath
normalizePath,
camelize,
capitalize
} = require('../util')

function hasProjectYarn (cwd) {
Expand Down Expand Up @@ -34,5 +36,8 @@ Please run \`${command}\` and try again.`
module.exports = {
version: require('../../package.json').version,
normalizePath,
installDepTips
installDepTips,
camelize,
capitalize,
isArray: Array.isArray
}
13 changes: 11 additions & 2 deletions packages/uni-cli-shared/lib/uts/uts-loader.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,19 @@
const path = require('path')
const {
resolveUTSCompiler
resolveUTSCompiler,
parseUniExtApiNamespacesOnce
} = require('./uts')
module.exports = function (content) {
const callback = this.async()
resolveUTSCompiler().compile(path.dirname(this.resourcePath)).then(result => {
resolveUTSCompiler().compile(path.dirname(this.resourcePath), {
isX: false,
isPlugin: true,
extApis: parseUniExtApiNamespacesOnce(
process.env.UNI_UTS_PLATFORM,
process.env.UNI_UTS_TARGET_LANGUAGE
),
sourceMap: process.env.NODE_ENV === 'development'
}).then(result => {
if (result) {
result.deps.forEach((dep) => {
this.addDependency(dep)
Expand Down
127 changes: 110 additions & 17 deletions packages/uni-cli-shared/lib/uts/uts.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,37 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.initUTSComponents = exports.resolveUTSCompiler = exports.resolveUtsModule = exports.resolveUtsAppModule = void 0;
exports.parseUniExtApiNamespacesJsOnce = exports.parseUniExtApiNamespacesOnce = exports.parseSwiftPackageWithPluginId = exports.parseKotlinPackageWithPluginId = exports.initUTSComponents = exports.parseUTSComponent = exports.isUTSComponent = exports.resolveUTSCompiler = exports.resolveUTSModule = exports.resolveUTSAppModule = void 0;
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const fast_glob_1 = __importDefault(require("fast-glob"));
const hbx_1 = require("./hbx");
const utils_1 = require("./utils");
const uni_modules_1 = require("./uni_modules");
// 重要,该文件编译后的 js 需要同步到 vue2 编译器 uni-cli-shared/lib/uts
function once(fn, ctx = null) {
let res;
return ((...args) => {
if (fn) {
res = fn.apply(ctx, args);
fn = null;
}
return res;
});
}
/**
* 解析 app 平台的 uts 插件,任意平台(android|ios)存在即可
* @param id
* @param importer
* @returns
*/
function resolveUtsAppModule(id, importer) {
function resolveUTSAppModule(id, importer, includeUTSSDK = true) {
id = path_1.default.resolve(importer, id);
if (id.includes('utssdk') || id.includes('uni_modules')) {
if (id.includes('uni_modules') || (includeUTSSDK && id.includes('utssdk'))) {
const parts = (0, utils_1.normalizePath)(id).split('/');
const parentDir = parts[parts.length - 2];
if (parentDir === 'uni_modules' || parentDir === 'utssdk') {
if (parentDir === 'uni_modules' ||
(includeUTSSDK && parentDir === 'utssdk')) {
const basedir = parentDir === 'uni_modules' ? 'utssdk' : '';
if (fs_1.default.existsSync(path_1.default.resolve(id, basedir, 'index.uts'))) {
return id;
Expand All @@ -29,32 +42,33 @@ function resolveUtsAppModule(id, importer) {
return path_1.default.resolve(id, basedir, p);
};
const extname = ['.uts'];
if (resolveUtsFile(resolvePlatformDir('app-android'), extname)) {
if (resolveUTSFile(resolvePlatformDir('app-android'), extname)) {
return id;
}
if (resolveUtsFile(resolvePlatformDir('app-ios'), extname)) {
if (resolveUTSFile(resolvePlatformDir('app-ios'), extname)) {
return id;
}
}
}
}
exports.resolveUtsAppModule = resolveUtsAppModule;
exports.resolveUTSAppModule = resolveUTSAppModule;
// 仅限 root/uni_modules/test-plugin | root/utssdk/test-plugin 格式
function resolveUtsModule(id, importer) {
function resolveUTSModule(id, importer, includeUTSSDK = true) {
if (process.env.UNI_PLATFORM === 'app' ||
process.env.UNI_PLATFORM === 'app-plus') {
return resolveUtsAppModule(id, importer);
return resolveUTSAppModule(id, importer);
}
id = path_1.default.resolve(importer, id);
if (id.includes('utssdk') || id.includes('uni_modules')) {
if (id.includes('uni_modules') || (includeUTSSDK && id.includes('utssdk'))) {
const parts = (0, utils_1.normalizePath)(id).split('/');
const parentDir = parts[parts.length - 2];
if (parentDir === 'uni_modules' || parentDir === 'utssdk') {
if (parentDir === 'uni_modules' ||
(includeUTSSDK && parentDir === 'utssdk')) {
const basedir = parentDir === 'uni_modules' ? 'utssdk' : '';
const resolvePlatformDir = (p) => {
return path_1.default.resolve(id, basedir, p);
};
let index = resolveUtsFile(resolvePlatformDir(process.env.UNI_UTS_PLATFORM));
let index = resolveUTSFile(resolvePlatformDir(process.env.UNI_UTS_PLATFORM));
if (index) {
return index;
}
Expand All @@ -65,8 +79,8 @@ function resolveUtsModule(id, importer) {
}
}
}
exports.resolveUtsModule = resolveUtsModule;
function resolveUtsFile(dir, extensions = ['.uts', '.ts', '.js']) {
exports.resolveUTSModule = resolveUTSModule;
function resolveUTSFile(dir, extensions = ['.uts', '.ts', '.js']) {
for (let i = 0; i < extensions.length; i++) {
const indexFile = path_1.default.join(dir, 'index' + extensions[i]);
if (fs_1.default.existsSync(indexFile)) {
Expand Down Expand Up @@ -100,16 +114,38 @@ function resolveUTSCompiler() {
return require(compilerPath);
}
exports.resolveUTSCompiler = resolveUTSCompiler;
const utsComponents = new Map();
function isUTSComponent(name) {
return utsComponents.has(name);
}
exports.isUTSComponent = isUTSComponent;
function parseUTSComponent(name, type) {
const meta = utsComponents.get(name);
if (meta) {
const namespace = meta[type === 'swift' ? 'swiftModule' : 'kotlinPackage'] || '';
const className = (0, utils_1.capitalize)((0, utils_1.camelize)(name)) + 'Component';
return {
className,
namespace,
source: meta.source,
};
}
}
exports.parseUTSComponent = parseUTSComponent;
function initUTSComponents(inputDir, platform) {
utsComponents.clear();
const components = [];
if (platform !== 'app' && platform !== 'app-plus') {
return components;
}
const easycomsObj = Object.create(null);
const easycomsObj = {};
const dirs = resolveUTSComponentDirs(inputDir);
dirs.forEach((dir) => {
const is_uni_modules_utssdk = dir.endsWith('utssdk');
const is_ussdk = !is_uni_modules_utssdk && path_1.default.dirname(dir).endsWith('utssdk');
const pluginId = is_uni_modules_utssdk
? path_1.default.basename(path_1.default.dirname(dir))
: path_1.default.basename(dir);
if (is_uni_modules_utssdk || is_ussdk) {
fast_glob_1.default
.sync('**/*.vue', {
Expand All @@ -125,15 +161,27 @@ function initUTSComponents(inputDir, platform) {
}
if (name) {
const importDir = (0, utils_1.normalizePath)(is_uni_modules_utssdk ? path_1.default.dirname(dir) : dir);
easycomsObj[`^${name}$`] = `\0${importDir}?uts-proxy`;
easycomsObj[`^${name}$`] = {
source: `${importDir}?uts-proxy`,
kotlinPackage: parseKotlinPackageWithPluginId(pluginId, is_uni_modules_utssdk),
swiftModule: parseSwiftPackageWithPluginId(pluginId, is_uni_modules_utssdk),
};
}
});
}
});
Object.keys(easycomsObj).forEach((name) => {
const obj = easycomsObj[name];
const componentName = name.slice(1, -1);
components.push({
name: componentName,
pattern: new RegExp(name),
replacement: easycomsObj[name],
replacement: obj.source,
});
utsComponents.set(componentName, {
source: obj.source,
kotlinPackage: obj.kotlinPackage,
swiftModule: obj.swiftModule,
});
});
return components;
Expand Down Expand Up @@ -162,3 +210,48 @@ function parseVueComponentName(file) {
return matches[1];
}
}
function prefix(id) {
if (process.env.UNI_UTS_MODULE_PREFIX &&
!id.startsWith(process.env.UNI_UTS_MODULE_PREFIX)) {
return process.env.UNI_UTS_MODULE_PREFIX + '-' + id;
}
return id;
}
function parseKotlinPackageWithPluginId(id, is_uni_modules) {
return 'uts.sdk.' + (is_uni_modules ? 'modules.' : '') + (0, utils_1.camelize)(prefix(id));
}
exports.parseKotlinPackageWithPluginId = parseKotlinPackageWithPluginId;
function parseSwiftPackageWithPluginId(id, is_uni_modules) {
return ('UTSSDK' +
(is_uni_modules ? 'Modules' : '') +
(0, utils_1.capitalize)((0, utils_1.camelize)(prefix(id))));
}
exports.parseSwiftPackageWithPluginId = parseSwiftPackageWithPluginId;
exports.parseUniExtApiNamespacesOnce = once((platform, language) => {
const extApis = (0, exports.parseUniExtApiNamespacesJsOnce)(platform, language);
const namespaces = {};
Object.keys(extApis).forEach((name) => {
const options = extApis[name];
let source = options[0];
const pluginId = path_1.default.basename(options[0]);
if (language === 'kotlin') {
source = parseKotlinPackageWithPluginId(pluginId, true);
}
else if (language === 'swift') {
source = parseSwiftPackageWithPluginId(pluginId, true);
}
namespaces[name] = [source, options[1]];
});
return namespaces;
});
exports.parseUniExtApiNamespacesJsOnce = once((platform, language) => {
const extApis = (0, uni_modules_1.parseUniExtApis)(true, platform, language);
const namespaces = {};
Object.keys(extApis).forEach((name) => {
const options = extApis[name];
if ((0, utils_1.isArray)(options) && options.length >= 2) {
namespaces[name.replace('uni.', '')] = [options[0], options[1]];
}
});
return namespaces;
});
2 changes: 1 addition & 1 deletion packages/vue-cli-plugin-uni/lib/configure-webpack.js
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@ module.exports = function configureWebpack (platformOptions, manifestPlatformOpt
patterns
} : patterns))

const uniExtApis = require('@dcloudio/uni-cli-shared/lib/uni_modules/uni_modules')
const uniExtApis = require('@dcloudio/uni-cli-shared/lib/uts/uni_modules')
.parseUniExtApis(false, process.env.UNI_UTS_PLATFORM, 'javascript')
const keys = Object.keys(uniExtApis)
if (keys.length) {
Expand Down
8 changes: 7 additions & 1 deletion packages/vue-cli-plugin-uni/lib/env.js
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,12 @@ function initUtsPlatform () {
process.env.UNI_UTS_PLATFORM = process.env.UNI_PLATFORM
}
}
process.env.UNI_UTS_TARGET_LANGUAGE = 'javascript'
if (process.env.UNI_UTS_PLATFORM === 'app-android') {
process.env.UNI_UTS_TARGET_LANGUAGE = 'kotlin'
} else if (process.env.UNI_UTS_PLATFORM === 'app-ios') {
process.env.UNI_UTS_TARGET_LANGUAGE = 'swift'
}
}

if (process.env.UNI_PLATFORM === 'app-plus') {
Expand Down Expand Up @@ -630,4 +636,4 @@ runByHBuilderX && console.log(uniI18n.__('compiling'))

module.exports = {
manifestPlatformOptions: platformOptions
}
}
2 changes: 1 addition & 1 deletion src/platforms/mp-xhs/runtime/wrapper/page-parser.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ export default function parsePage (vuePageOptions) {
this.$vm.__call_hook('onLoad', this.__query)
setTimeout(() => {
this.$vm.__call_hook('onReady')
});
})
},
onUnload () {
this.$vm.__call_hook('onUnload')
Expand Down

0 comments on commit cbb2397

Please sign in to comment.