首页 > 其他分享 >quickjs运行typescript?

quickjs运行typescript?

时间:2023-12-15 16:44:51浏览次数:34  
标签:school typescript name age ts js webpack quickjs 运行

一、前言

  quickjs是标准的js引擎,不可能直接运行ts文件。所以需要对ts文件,进行编译,编译成符合当前版本的js脚本,然后在运行。

二、简单ts例子

  安装typescript,就有tsc编译器。使用npm之类安装。使用 tsc --init 创建项目,此时会得到一个tsconfig.js 配置文件。在src目录创建一个index.ts文件后,就可以写代码了。

  然后运行 tsc -p tsconfig.json --watch 试试监视src目录,并转为js文件。tsconfig.json 可以配置一下 "outDir": "./build", 根据不同情况,可以配置 "target": "ES5" 或 "target": "ES6", 

  tsconfig.json

 

 1 {
 2   "compilerOptions": {
 3     "target": "ES6",
 4     "module": "ES6",
 5     "outDir": "./build",
 6     "esModuleInterop": true,
 7     "forceConsistentCasingInFileNames": true,
 8     "strict": true,
 9     "skipLibCheck": true
10   }
11 }

 

  index.ts

1 import { Student } from "./modules"; //这里由于ts默认是没有后缀的,但是编译后,也没有后缀,而quickjs需要根据后缀判断类型,如so、js
2 
3 new Promise((resolve, reject)=>{
4   var student = new Student("张三",18,"北京大学");
5   student.print();
6   resolve(student);
7 }).then((data)=>{
8   console.log(data);
9 });

  modules.ts

 1 class Person{
 2   name: string;
 3   age: number;
 4   constructor(name:string,age:number){
 5     this.name = name;
 6     this.age = age;
 7   }
 8   print(): void {
 9     console.log(`name:${this.name},age:${this.age}`);
10   }
11 }
12 /**
13  * 学生类
14  */
15 export class Student extends Person{
16   school: string;
17   constructor(name:string,age:number,school:string){
18     super(name,age);
19     this.school = school;
20   }
21   print(): void {
22     super.print();
23     console.log(`school:${this.school}`);
24   }
25 }

  上面的ts经过实时编译后,会在build目录产生 index.js modules.js 两个文件,通过下面命令行可以直接运行index.js 并打印信息。

 

 

1 qjs.exe .\index.js

   默认编译成ES5,通过原型链实现类,如果指定--target es6,那么可以直接使用class,同理也可以使用--module es6 方式的模块引用

 

三、webpack打包

  如果直接加载源码js,无法做到简洁发布,同时源码容易泄露。因此,用webpack打包成单个bundle库。便于发布管理。先使用npm 安装webpack打包工具 npm install webpack, npm install webpack-cli

1 npm install webpack -g
2 npm install webpack-cli -g
3 npm init -y

  新建一个webpack.config.js文件,这个是webpack的配置文件。

 1 const path = require('path');
 2 
 3 //webpack配置
 4 module.exports = {
 5   //打包入口
 6   entry: './build/index.js',
 7   output: {
 8     path: path.resolve(__dirname, 'dist'),
 9     filename: 'bundle.js'
10   },
11   // mode: 'development',
12   mode: 'production'
13 }

 

四、运行

  qjs.exe .\dist\bundle.js

 1 PS D:\test\ts\code> ..\..\quickjs\qjs.exe .\dist\bundle.js
 2 name:张三,age:18
 3 school:北京大学
 4 [object Object]
 5 QuickJS memory usage -- BigNum 2021-03-27 version, 64-bit, malloc limit: -1
 6 
 7   712 + 0   JSRuntime
 8   488 + 0   JSContext
 9    80 + 0   JSObject
10    40 + 0   JSString
11   136 + 0   JSFunctionBytecode
12 
13 JSObject classes
14 
15 NAME                    COUNT     SIZE
16 memory allocated          412    43419  (105.4 per block)
17 memory used               307    29035  (8 overhead, 46.9 average slack)
18 atoms                     295    22251  (75.4 per atom)

 

  后面我们写jsruntime时,需要基于runtime提供的函数,再封装一层,提供合适的库给上层js调用。

 

本文地址:https://www.cnblogs.com/wunaozai/p/17901660.html

系列目录:https://www.cnblogs.com/wunaozai/p/17853962.html

 

标签:school,typescript,name,age,ts,js,webpack,quickjs,运行
From: https://www.cnblogs.com/wunaozai/p/17901660.html

相关文章

  • quickjs C功能扩展的四种写法
    一、前言 茴香豆的“茴”字有多少种写法?这篇博客不是为了炫技,是JS就是这么多种情况。比如C语言,就只能通过函数调用,没有类的概念。比如Java,就只能通过类、对象的方式。不能单独创建函数。哪怕main函数也要包装成一个class。而JS,即可以提供函数,也可以提供类。在ES5之前,JS......
  • containerd-wasm-shims k8s 运行webassembly 的containerd shim
    containerd-wasm-shims属于一个包装,基于了runwasi可以实现在k8ss中运行webassembly工作负载,使用上提供了多种wasm应用runtimes以及扩展,同时目前KWasm组织也包装了一个k8soperator实现方便的部署说明基于webassembly的运行模式是越来越多了,大家趋向于与k8s以及容器集成......
  • JVM虚拟机系统性学习-运行时数据区(堆)
    运行时数据区JVM由三部分组成:类加载系统、运行时数据区、执行引擎下边讲一下运行时数据区中的构成根据线程的使用情况分为两类:线程独享(此区域不需要垃圾回收)虚拟机栈、本地方法栈、程序计数器线程共享(数据存储区域,此区域需要垃圾回收)存储类的静态数据和对象数据堆和方法区堆Java......
  • (13)不运行程序,立即预览报表
    前提是要在设计的时候,数据库已正确连接和显示 双击frxReport1 ......
  • 解决uniapp无法ios运行的问题
    问题描述设备无法运行uniapp应用设备无法运行uniapp应用的问题表现在哪些方面?如何判断iOS设备无法运行uniapp应用?iOS设备无法运行uniapp应用的原因有哪些?有哪些可能的解决方法解决方法:检查代码错误:首先要检查代码是否存在拼写错误、语法错误或者逻辑错误,这些问题都可能导致应用......
  • 铁威马NAS使用docker方式运行Solopace.Gem客户端
     安装DockerManagerNAS系统版本:系统桌面点击启动“应用中心”,搜索docker,选择“DockerManager”进行安装选择“已安装”菜单栏,找到DockerManager并启用开启ssh远程连接桌面打开:控制面板>>终端与SNMP>>Telnet/SSH,按照下图设置并应用运行SolopaceGemDocker容器使用任意支持ssh协......
  • HarmonyOS学习(一) TypeScript 基础语法
    HarmonyOS学习(一)TypeScript基础语法一、基础类型1、布尔型booleanletisEnd:boolean=false;2、数字number//十进制2023letdecLiteral:number=2023;//二进制2023letbinaryLiteral:number=0b11111100111;//八进制2023letoctalLiteral:number=0o37......
  • React-native ios运行报错 No bundle URL present
    新建项目报错如下:需要手动生成ios下的main.jsbundle文件解决方法:1、生成main.jsbundle文件,在终端项目目录下执行:react-nativebundle--entry-fileindex.js--bundle-output./ios/main.jsbundle--platformios--assets-dest./ios--devfalse或在package.json里面添加以下执......
  • centos7搭建kubernetes-v1.25.1集群(Containerd作为运行时)
    集群配置节点名称内存硬盘处理器内核总数ipmaster6GB40GB6192.168.67.166node16GB40GB6192.168.67.167node26GB40GB6192.168.67.168一、所有节点更改镜像源curl-o/etc/yum.repos.d/CentOS-Base.repo二、所有节点安装docker,注意:K8s在1.24以上......
  • 可视化监控云平台/智能监控EasyCVR如何使用脚本创建ramdisk挂载并在ramdisk中临时运行
    视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。安防管理视频平台EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、云存储、回放与检索、智能告警、服务器集群、......