首页 > Web开发 > 详细

graalvm js 内置commonjs 模式试用

时间:2020-08-31 14:54:54      阅读:135      评论:0      收藏:0      [点我收藏+]

昨天有大概介绍过graalvm 对于commonjs 的支持,以下是简单的试用说明

环境准备

  • pom.xml
    依赖配置
 
        <dependency>
            <groupId>org.graalvm.truffle</groupId>
            <artifactId>truffle-api</artifactId>
            <version>20.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.graalvm.sdk</groupId>
            <artifactId>graal-sdk</artifactId>
            <version>20.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.graalvm.js</groupId>
            <artifactId>js-scriptengine</artifactId>
            <version>20.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.graalvm.js</groupId>
            <artifactId>js</artifactId>
            <version>20.2.0</version>
        </dependency>
  • npm 代码结构
    使用yarn 管理的,添加了一个hashids 的包

技术分享图片

 

 

 

  • 代码使用
    Engine 对象定义,主要开启了实验特性
 
        Engine engine = Engine.newBuilder().option("js.load-from-url","true").allowExperimentalOptions(true).build();

主要是关于commonjs 选项的配置,npm位置以及开启comomjs 处理

    public static void commonjs(Engine engine){
        Map<String, String> options = new HashMap<>();
        options.put("js.commonjs-require-cwd", "src/main/resources/app");
        options.put("js.commonjs-require", "true");
        Context context = Context.newBuilder().allowAllAccess(true).options(options).allowHostClassLoading(true).allowIO(true).allowNativeAccess(true).engine(engine).build();
        context.eval("js","const Hashids = require(‘hashids/cjs‘)\n" +
                "const hashids = new Hashids()\n" +
                " \n" +
                "console.log(hashids.encode(222))");
?
    }
  • 运行效果

技术分享图片

 

 

说明

有些npm build in的模块可能不能使用,这个可以通过hack 的方式解决(配置js.commonjs-core-modules-replacements参数),同时对于好多不支持的commonjs 模块我们可以基于browserify 提供的一些hacks,还是很不错的

参考资料

https://github.com/graalvm/graaljs/blob/master/docs/user/NodeJSVSJavaScriptContext.md
https://github.com/browserify/browserify#usage

graalvm js 内置commonjs 模式试用

原文:https://www.cnblogs.com/rongfengliang/p/13589056.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!