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

七:待續。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM