一、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后是会清除的,所以不用担心打包后存在不标准的代码)
七:待续。。