feat: add nodejs internal module support
Signed-off-by: MiaoWoo <admin@yumc.pw>
This commit is contained in:
parent
ebf218e534
commit
876c9b77f7
3
pom.xml
3
pom.xml
@ -3,7 +3,7 @@
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>pw.yumc</groupId>
|
||||
<artifactId>MiaoScript</artifactId>
|
||||
<version>0.3.1</version>
|
||||
<version>0.4.0</version>
|
||||
<developers>
|
||||
<developer>
|
||||
<id>502647092</id>
|
||||
@ -54,6 +54,7 @@
|
||||
<properties>
|
||||
<env.GIT_COMMIT>DEV</env.GIT_COMMIT>
|
||||
<update.changes>
|
||||
§620-03-31 §afeat: require 新增 内建 nodejs 模块;
|
||||
§620-03-03 §afeat: require 新增 淘宝镜像源拉取;
|
||||
§620-02-27 §afeat: 异步加载脚本引擎;
|
||||
§620-02-25 §afeat: 新增 Nukkit 的支持;
|
||||
|
@ -207,7 +207,7 @@
|
||||
cacheModules[id] = module;
|
||||
var cfile = _canonical(file);
|
||||
if (cfile.endsWith('.js')) {
|
||||
compileJs(module, file, optional);
|
||||
compileJs(module, file, __assign(optional, { id: id }));
|
||||
} else if (cfile.endsWith('.json')) {
|
||||
compileJson(module, file);
|
||||
} else if (cfile.endsWith('.msm')) {
|
||||
@ -234,7 +234,7 @@
|
||||
// 2019-09-19 使用 扩展函数直接 load 无需保存/删除文件
|
||||
// 2020-02-16 结尾新增换行 防止有注释导致加载失败
|
||||
// @ts-ignore
|
||||
var compiledWrapper = engineLoad({ script: '(function $(module, exports, require, __dirname, __filename) {' + origin + '\n});', name: file });
|
||||
var compiledWrapper = engineLoad({ script: '(function $(module, exports, require, __dirname, __filename) {' + origin + '\n});', name: optional.id });
|
||||
compiledWrapper.apply(module.exports, [
|
||||
module, module.exports, module.require, file.parentFile, file
|
||||
]);
|
||||
@ -261,14 +261,16 @@
|
||||
// handle name es6-map/implement => es6-map @ms/common/dist/reflect => @ms/common
|
||||
var name_arr = name.split('/');
|
||||
var module_name = name.startsWith('@') ? name_arr[0] + '/' + name_arr[1] : name_arr[0];
|
||||
var target = root + separatorChar + 'node_modules' + separatorChar + module_name;
|
||||
var _package = new File(target, 'package.json');
|
||||
if (_package.exists()) { return }
|
||||
// at windows need replace file name java.lang.IllegalArgumentException: Invalid prefix or suffix
|
||||
var tempFile = Files.createTempFile(module_name.replace('/', '_'), '.json');
|
||||
var info = fetchPackageInfo(module_name, tempFile);
|
||||
var info = fetchPackageInfo(module_name);
|
||||
var url = info.versions[info['dist-tags']['latest']].dist.tarball;
|
||||
console.log('fetch node_module ' + module_name + ' from ' + url + ' waiting...')
|
||||
var tis = new TarInputStream(new BufferedInputStream(new GZIPInputStream(new URL(url).openStream())));
|
||||
// @ts-ignore
|
||||
var entry; var target = root + separatorChar + 'node_modules' + separatorChar + module_name;
|
||||
var entry;
|
||||
while ((entry = tis.getNextEntry()) != null) {
|
||||
var targetPath = Paths.get(target + separatorChar + entry.getName().substring(8));
|
||||
targetPath.toFile().getParentFile().mkdirs();
|
||||
@ -277,7 +279,8 @@
|
||||
return name;
|
||||
}
|
||||
|
||||
function fetchPackageInfo(module_name, tempFile) {
|
||||
function fetchPackageInfo(module_name) {
|
||||
var tempFile = Files.createTempFile(module_name.replace('/', '_'), '.json');
|
||||
try {
|
||||
Files.copy(new URL('https://registry.npm.taobao.org/' + module_name).openStream(), tempFile, StandardCopyOption.REPLACE_EXISTING);
|
||||
} catch (ex) {
|
||||
@ -292,10 +295,15 @@
|
||||
* 检查核心模块
|
||||
* @param {string} name
|
||||
*/
|
||||
function checkCoreModule(name) {
|
||||
function checkCoreModule(name, path) {
|
||||
if (CoreModules.indexOf(name) != -1) {
|
||||
throw new Error("Can't load nodejs core module " + name + " . maybe later will auto replace to @ms/" + name + ' to compatible...')
|
||||
var newName = '@ms/nodejs/dist/' + name
|
||||
if (resolve(newName, path) !== undefined) {
|
||||
return newName;
|
||||
}
|
||||
throw new Error("Can't load nodejs core module " + name + " . maybe later will auto replace to @ms/nodejs/" + name + ' to compatible...')
|
||||
}
|
||||
return name;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -306,7 +314,7 @@
|
||||
* @returns {*}
|
||||
*/
|
||||
function _require(name, path, optional) {
|
||||
checkCoreModule(name);
|
||||
name = checkCoreModule(name, path);
|
||||
var file = new File(name);
|
||||
file = _isFile(file) ? file : resolve(name, path);
|
||||
optional = __assign({ cache: true }, optional);
|
||||
@ -367,9 +375,12 @@
|
||||
* @param {string} name
|
||||
*/
|
||||
function __DynamicClear__(name) {
|
||||
var moduleId = require.resolve(name)
|
||||
console.trace('Clear module ' + name + '(' + moduleId + ') ...')
|
||||
return delete cacheModules[moduleId]
|
||||
for (var cacheModule in cacheModules) {
|
||||
if (cacheModule.indexOf(name) != -1) {
|
||||
console.trace('Clear module ' + cacheModule + ' ...')
|
||||
delete cacheModules[cacheModule]
|
||||
}
|
||||
}
|
||||
}
|
||||
return require;
|
||||
}
|
||||
@ -382,11 +393,11 @@
|
||||
*/
|
||||
var cacheModules = {};
|
||||
/**
|
||||
* @type {{[key:string]:string}} cacheModules
|
||||
* @type {{[key:string]:string}} cacheModuleIds
|
||||
*/
|
||||
var cacheModuleIds = {};
|
||||
/**
|
||||
* @type {{[key:string]:boolean}} cacheModules
|
||||
* @type {{[key:string]:boolean}} notFoundModules
|
||||
*/
|
||||
var notFoundModules = {};
|
||||
console.info('Initialization require module. ParentDir:', _canonical(parent));
|
||||
|
Loading…
Reference in New Issue
Block a user