• graalvm js 内置commonjs 模式试用


    昨天有大概介绍过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')
    " +
                    "const hashids = new Hashids()
    " +
                    " 
    " +
                    "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

  • 相关阅读:
    部署第二个master节点
    Spark On YARN使用时上传jar包过多导致磁盘空间不够。。。
    Spark1.3使用外部数据源时条件过滤只要是字符串类型的值均报错
    spark1.3编译过程中遇到的一个坑
    Hive On Spark hiveserver2方式使用
    Hive On Spark概述
    Hive On Spark环境搭建
    RDD常用方法之subtract&intersection&cartesian
    SparkSQL DataFrames操作
    通过Spark SQL关联查询两个HDFS上的文件操作
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/13589056.html
Copyright © 2020-2023  润新知