Silentdoer

导航

统计

Deno1.0初体验

一、Deno是node创始人新开的一个项目,功能和node类似,不过解决了node里很多的不一致和功能缺失等问题,今天刚好发布1.0版本,可以尝尝鲜,以后自写项目可以用deno而不用node;

二、Linux下载安装最新版:curl -fsSL https://deno.land/x/install/install.sh|sh

等下载解压好后会在~/.deno/bin里有个deno的可执行文件,用ln -s ...来创建它的软连接到/usr/bin/deno里,然后deno --version就能看到版本信息了(deno版本和v8版本和typescript版本)

三、我们先来测试一下deno默认支持ES6的module,在node里,即便是最新的模块规范里(nodev.13.2版本以后貌似)也是需要命名为.mjs或者添加一个package.json然后里面配置"type": "module"用node b.js也能正确运行【但是这个时候当前目录里就不能有CommonJS标准的模块化代码了,即require和module.exports(导出的是对象而非必须是JSON),而且CSJ和MJS仍然是不互通的);而deno默认就是支持import,export,比如我们写两个同目录文件:

1.a.js

class Student {
    name = '';
    gender = 0;
    constructor(name, gender) {
        this.name = name;
        this.gender = gender;
    }

    test() {
        console.log(this.name);
    }
}

export default Student;

2.b.js

import Student from './a.js';

let stud = new Student('sf', 8);
stud.test();
console.dir(stud);

如果要运行b.js,在node里是node b.js,但是是会报错的,必须把a.js改成a.mjs及把b.js改成b.mjs,然后node b.mjs才可以(或者创建一个package.json里配置为ES6的module)

而用deno可以直接deno run b.js就能输出结果。

四:deno天然支持typescript(虽然也是编译成js,但是是deno内部进行的),不需要额外安装依赖,所以我们可以直接deno run k.ts:

class Student {
    constructor(public name: string, public gender: number) {
    }
}

let stud = new Student('sjfkl', 3);
console.log(stud.name, stud.gender);

deno run k.ts会提示一句:Compile file:///home/silentdoer/DenoProjects/k.ts,表明deno已经将ts文件编译成了js文件然后运行(但是编译后的js文件是不会污染工作目录的)

五:如果需要将一个ts文件主动编译成js文件可以用deno bundle k.ts k.js,那么就会生成一个k.js文件到当前目录(不过这个k.js文件似乎也多额外内容了。。)

也可以deno bundle b.js b.js,那么原先的b.js会被删除产生打包后的b.js,原先的b.js依赖的其他文件都会打包进新的b.js里(不过最好不要同名,可以deno bundle b.js dist/b.js这样也行);

而且打包后的文件是能够被node执行的;【打包后的就是JavaScript,哪怕你主动写目标文件是xx.ts,而且貌似是ES6的标准而非ES5】

六:也可以通过deno将js或ts作为运维脚本:

#!/home/silentdoer/.deno/bin/deno run
console.log('放暑假了');

注意,将这个exec.js文件添加为可执行权限后就可以直接./exec.js运行了,最上面的那个代码deno是能识别不会报错的,用deno run exec.js也一样可以执行;(而且上面的#!/home/...在deno bundle xx.js output/xx.js后是会清除的,所以不用担心打包后存在不标准的代码)

七:待续。。

posted on 2020-05-14 17:26  Silentdoer  阅读(...)  评论(...编辑  收藏