一、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后是會清除的,所以不用擔心打包后存在不標准的代碼)
七:待續。。