更新
This commit is contained in:
+57
@@ -0,0 +1,57 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.uniPostSourceMapPlugin = void 0;
|
||||
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
|
||||
const path_1 = require("path");
|
||||
function uniPostSourceMapPlugin() {
|
||||
return {
|
||||
name: 'uni:post-sourcemap',
|
||||
apply: 'serve',
|
||||
enforce: 'post',
|
||||
configureServer(server) {
|
||||
// cli 工程呢?
|
||||
// 重要:hack 了 _pendingRequests,来修改 map
|
||||
const pendingRequests = new PendingRequests();
|
||||
pendingRequests._server = server;
|
||||
pendingRequests._inputDir = (0, uni_cli_shared_1.normalizePath)(process.env.UNI_INPUT_DIR);
|
||||
// @ts-expect-error
|
||||
server._pendingRequests = pendingRequests;
|
||||
},
|
||||
};
|
||||
}
|
||||
exports.uniPostSourceMapPlugin = uniPostSourceMapPlugin;
|
||||
function isSourceMap(map) {
|
||||
return map && map.sources;
|
||||
}
|
||||
class PendingRequests extends Map {
|
||||
set(key, value) {
|
||||
const then = value.request.then;
|
||||
// @ts-expect-error
|
||||
value.request.then = (onFulfilled, onRejected) => {
|
||||
// @ts-expect-error
|
||||
return then.call(value.request, (request) => {
|
||||
const map = request?.map;
|
||||
if (map) {
|
||||
// @ts-expect-error
|
||||
const mod = this._server.moduleGraph._getUnresolvedUrlToModule(key);
|
||||
if (mod && mod.file && (0, path_1.isAbsolute)(mod.file)) {
|
||||
const dir = (0, uni_cli_shared_1.normalizePath)((0, path_1.dirname)(mod.file));
|
||||
if (dir.startsWith(this._inputDir) && isSourceMap(map)) {
|
||||
for (let sourcesIndex = 0; sourcesIndex < map.sources.length; ++sourcesIndex) {
|
||||
const sourcePath = map.sources[sourcesIndex];
|
||||
if (sourcePath) {
|
||||
// 将相对路径转换为绝对路径
|
||||
if (!(0, path_1.isAbsolute)(sourcePath)) {
|
||||
map.sources[sourcesIndex] = (0, uni_cli_shared_1.normalizePath)((0, path_1.join)(dir, sourcePath));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return onFulfilled?.(request);
|
||||
}, onRejected);
|
||||
};
|
||||
return super.set(key, value);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user