feat: use classpath load core js

Signed-off-by: MiaoWoo <admin@yumc.pw>
This commit is contained in:
MiaoWoo 2020-04-22 09:23:21 +08:00
parent 87c78f7c6f
commit 351183ab3c
6 changed files with 25 additions and 39 deletions

View File

@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>pw.yumc</groupId>
<artifactId>MiaoScript</artifactId>
<version>0.4.2</version>
<version>0.5.0</version>
<developers>
<developer>
<id>502647092</id>
@ -54,6 +54,7 @@
<properties>
<env.GIT_COMMIT>DEV</env.GIT_COMMIT>
<update.changes>
§620-04-10 §afeat: 默认从 classpath 加载内建的js模块;
§620-04-07 §afeat: 默认初始化 内建 nodejs 模块;
§620-04-03 §afeat: 优化 框架卸载逻辑;
§620-03-31 §afeat: require 新增 内建 nodejs 模块;
@ -178,7 +179,7 @@
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.14.4-R0.1-SNAPSHOT</version>
<version>1.15.2-R0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.spongepowered</groupId>
@ -188,7 +189,7 @@
<dependency>
<groupId>net.md-5</groupId>
<artifactId>bungeecord-api</artifactId>
<version>1.12-SNAPSHOT</version>
<version>1.15-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>cn.nukkit</groupId>

View File

@ -39,7 +39,7 @@ public class ScriptEngine {
if (Files.exists(bios)) {
this.engine.eval("load('" + bios.toFile().getCanonicalPath() + "')");
} else {
this.engine.eval(new InputStreamReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("bios.js")));
this.engine.eval("load('classpath:bios.js')");
}
engine.invokeFunction("boot", root, logger);
}

View File

@ -12,7 +12,7 @@ var global = this;
log = logger;
// Development Env Detect
root = root || "src/main/resources";
if (__FILE__ !== "<eval>") {
if (__FILE__.indexOf('!') === -1) {
logger.info('Loading custom BIOS file ' + __FILE__);
global.debug = true;
}
@ -24,14 +24,13 @@ var global = this;
global.level = base.read(java.nio.file.Paths.get(root, "level"))
logger.info('Set system level to [' + global.level + ']...');
}
// Check Class Loader, Sometimes Server will can't find plugin.yml file
// Check Class Loader, Sometimes Server will can't found plugin.yml file
loader = checkClassLoader();
// Force decompression core|node_modules to folder when not debug mode
release(root, '(core)+/.*', !global.debug);
// Async Loading MiaoScript Engine
new java.lang.Thread(function() {
load(root + '/core/ployfill.js')(root, logger);
engineDisable = require('@ms/core').default;
java.lang.Thread.currentThread().contextClassLoader = loader;
load('classpath:core/ployfill.js')(root, logger);
engineDisable = require('@ms/core').default || function() { logger.info('Error: abnormal Initialization MiaoScript Engine. Skip disable step...') };
}, "MiaoScript thread").start()
};
@ -49,30 +48,4 @@ var global = this;
}
return classLoader;
}
function release(root, regex, replace) {
var filePath = pluginYml.getFile().substring(pluginYml.getFile().indexOf("/") + 1);
var jarPath = java.net.URLDecoder.decode(filePath.substring(0, filePath.indexOf('!')));
if (!java.nio.file.Files.exists(java.nio.file.Paths.get(jarPath))) {
jarPath = "/" + jarPath;
}
var jar = new java.util.jar.JarFile(jarPath);
var r = new RegExp(regex);
jar.stream().forEach(function(entry) {
try {
if (!entry.isDirectory()) {
if (r.test(entry.name)) {
var path = java.nio.file.Paths.get(root, entry.name);
var parentFile = path.toFile().parentFile;
if (!parentFile.exists()) { parentFile.mkdirs(); }
if (!java.nio.file.Files.exists(path) || replace) {
java.nio.file.Files.copy(loader.getResourceAsStream(entry.name), path, java.nio.file.StandardCopyOption['REPLACE_EXISTING']);
}
}
}
} catch (ex) {
ex.printStackTrace();
}
})
}
})();

View File

@ -13,10 +13,10 @@
global.load = load = function __PreventGlobalLoadFunction__() { throw new Error('Internal engine system not allow use `load` function!'); }
global.setGlobal = function(key, value) { global[key] = value; };
// Init console and require
global.console = engineLoad(global.root + '/core/console.js')(logger);
global.console = engineLoad('classpath:core/console.js')(logger);
console.log("Loading Engine at Thread", java.lang.Thread.currentThread().name)
global.require = engineLoad(global.root + '/core/require.js')(root);
global.require = engineLoad('classpath:core/require.js')(root);
require('@ms/ployfill')
require('@ms/nodejs')
}
);
)

View File

@ -382,6 +382,17 @@
}
}
}
require.disable = function __DynamicDisable__() {
for (var cacheModule in cacheModules) {
delete cacheModules[cacheModule]
}
cacheModules = undefined;
for (var cacheModule in cacheModuleIds) {
delete cacheModuleIds[cacheModule]
}
cacheModuleIds = undefined;
notFoundModules = undefined;
}
return require;
}

View File

@ -2,6 +2,7 @@ name: ${project.artifactId}
description: ${project.description}
main: ${project.groupId}.${project.artifactId}.${project.artifactId}
version: ${project.version}
api-version: 1.13
author: MiaoWoo
website: ${ciManagement.url}
load: STARTUP