feat: compatible node_modules load logic
Signed-off-by: MiaoWoo <admin@yumc.pw>
This commit is contained in:
parent
bbf08816ba
commit
de18b0f628
@ -10,6 +10,7 @@
|
||||
return {
|
||||
log: log,
|
||||
info: log,
|
||||
ex: log,
|
||||
debug: global.debug ? _proxy('DEBUG') : global.noop,
|
||||
warn: _proxy('WARN'),
|
||||
error: _proxy('ERROR')
|
||||
|
@ -1,5 +1,6 @@
|
||||
(function(root, logger) {
|
||||
global.root = root;
|
||||
global.logger = logger;
|
||||
global.noop = global.engineDisable = function() { };
|
||||
// disable
|
||||
global.engineLoad = load;
|
||||
|
@ -29,9 +29,9 @@
|
||||
(function(parent) {
|
||||
'use strict';
|
||||
var File = Java.type("java.io.File");
|
||||
var FileNotFoundException = Java.type("java.io.FileNotFoundException");
|
||||
var separatorChar = File.separatorChar;
|
||||
var cacheDir = parent + separatorChar + "runtime";
|
||||
var paths = [parent + separatorChar + 'node_modules', parent];
|
||||
|
||||
function __assign(t) {
|
||||
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
||||
@ -104,25 +104,21 @@
|
||||
name = _canonical(name) || name;
|
||||
// 解析本地目录
|
||||
if (name.startsWith('./') || name.startsWith('../')) {
|
||||
return resolveAsFile(parent, name) || resolveAsDirectory(parent, name) || undefined;
|
||||
return resolveAsFile(name, parent) || resolveAsDirectory(name, parent) || undefined;
|
||||
} else {
|
||||
// 查找可能存在的路径
|
||||
for (var i in paths) {
|
||||
var path = paths[i];
|
||||
var result = resolveAsFile(path, name) || resolveAsDirectory(path, name);
|
||||
if (result) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
// 解析Node目录
|
||||
var dir = [parent, 'node_modules'].join(separatorChar);
|
||||
return resolveAsFile(name, dir) ||
|
||||
resolveAsDirectory(name, dir) ||
|
||||
(parent && parent.toString().startsWith(root) ? resolve(name, new File(parent).getParent()) : undefined);
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析文件
|
||||
* @returns {*}
|
||||
*/
|
||||
function resolveAsFile(dir, file) {
|
||||
function resolveAsFile(file, dir) {
|
||||
file = dir != undefined ? new File(dir, file) : new File(file);
|
||||
// 直接文件
|
||||
if (file.isFile()) {
|
||||
@ -144,17 +140,17 @@
|
||||
* 解析目录
|
||||
* @returns {*}
|
||||
*/
|
||||
function resolveAsDirectory(dir, file) {
|
||||
function resolveAsDirectory(file, dir) {
|
||||
dir = dir != undefined ? new File(dir, file) : new File(file);
|
||||
var _package = new File(dir, 'package.json');
|
||||
if (_package.exists()) {
|
||||
var json = JSON.parse(base.read(_package));
|
||||
if (json.main) {
|
||||
return resolveAsFile(dir, json.main);
|
||||
return resolveAsFile(json.main, dir);
|
||||
}
|
||||
}
|
||||
// if no package or package.main exists, look for index.js
|
||||
return resolveAsFile(dir, 'index.js');
|
||||
return resolveAsFile('index.js', dir);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -259,7 +255,7 @@
|
||||
file = _isFile(file) ? file : resolve(name, path);
|
||||
optional = __assign({ cache: true }, optional);
|
||||
if (file === undefined) {
|
||||
throw Error("Can't found module " + name + " in directory " + path)
|
||||
throw new FileNotFoundException("Can't found module " + name + " in directory " + path)
|
||||
}
|
||||
// 重定向文件名称和类型
|
||||
return getCacheModule(_canonical(file), file.name.split(".")[0], file, optional);
|
||||
|
Loading…
Reference in New Issue
Block a user