日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

vue項目配置使用flow類型檢查的步驟

瀏覽:182日期:2023-01-30 13:58:50

你是否經(jīng)常在debug那些簡單可避免的bug?可能你給函數(shù)傳參的時候搞錯了參數(shù)的順序,或者本來應(yīng)該傳個Number類型的參數(shù),你傳了一個String類型?JavaScript的弱類型是這一類bug的罪魁禍首,靜態(tài)類型語言中不存在此類bug。Flow就是JavaScript的靜態(tài)類型檢查工具,該庫的目標在于檢查JavaScript中的類型錯誤,開發(fā)者通常不需要修改代碼即可使用,故使用成本很低。同時,它也提供額外語法支持,使得開發(fā)者能更大程度地發(fā)揮Flow的作用。

一、flow的安裝

flow可以直接通過npm或者yarn安裝。

這里以npm為例:npm install --save-dev flow-bin

安裝完成后在package.json中加入下面的腳本

'scripts': { 'flow':'flow check' }

同時還要安裝babel編譯器,將flow的類型檢查代碼從代碼中剝離,轉(zhuǎn)變成正常的js代碼

npm install --save-dev babel-cli babel-preset-flow

在babel配置文件.babelrc中加入

{ 'presets': ['flow']}

二、flow使用

1、配置flow

npm run flow init生成flow配置文件.flowconfig

[ignore].*/node_modules/.*.*/test/.*.*/build/.*.*/config/.*[include][libs][options]module.file_ext=.vue module.file_ext=.js

[ignore]:Flow 默認檢查項目目錄下所有文件,但是有很多文件必定是我們不想檢查的,就像 node_modules、build 等目錄下的文件,所以我們需要在將這些目錄寫在 ignore 配置下。

[include]:所謂的項目目錄其實是 .flowconfig 目錄,并不是真正的項目目錄,如果我們在這個項目中的某個目錄下創(chuàng)建一個 .flowconfig,那么 .flowconfig 所在的目錄也會變?yōu)橐粋€ Flow 項目。那么,如果我們想對當前 Flow 項目以外的文件或者目錄進行檢查,需要把它們寫在 include 配置項中。

[libs]:在項目中,我們可能會用到很多自定義的類型,比如說要記錄對象的結(jié)構(gòu),它可能在每個文件中都會被運用到,我們將其抽取為全局的類型或數(shù)據(jù)結(jié)構(gòu),在任何文件都可以使用。為了管理方便,我們將全局類型都定義在一個或多個單純的目錄中統(tǒng)一管理。這里存放的有可能是一個定義好的數(shù)據(jù)結(jié)構(gòu),存放的也有可能是根據(jù)項目中某個類對應(yīng)的數(shù)據(jù)類型。我們將這些文件或目錄寫在 libs 配置項中,這個配置對于我們使用 Flow 來說很重要。

[options]:這里填寫對 Flow 項目的一些配置,配置項以key=value的形式,每行寫一個。所有的配置見官方文檔

[lints]:官網(wǎng)中沒有提到 lints 相關(guān)的配置

2、新建一個文件index.js

// @flow let a:number = ’3’;// @flow或者 /* @flow */,告訴flow檢查這個文件

如果不愿意那么麻煩,想檢查全部文件,那么可以修改配置文件.flowconfig,在[options]配置項中添加 all=ture。

[ignore][include][libs][options]all=true[lints]

[libs] 配置項中的文件不需要添加// @flow,它們都將被檢查。

注:在vue單文件組件使用flow需要額外配置:

(1)在.flowconfig文件的[options]中配置.vue文件擴展名,module.file_ext=.vue

(2)在.vue文件中需注釋掉template script styled標簽

輸入npm run flow 執(zhí)行類型檢查。

注:完成設(shè)置之后,在終端輸入以下命令可以在你的項目根目錄以及任何子目錄文件夾下進行專門的類型檢查:npm run flow check,但是,這并不是最高效的使用方式,因為每次Flow都會重新檢查整個項目的所有文件。開發(fā)過程中,推薦啟動Flow服務(wù):Flow服務(wù)的工作方式是增量檢查,也就是說它只檢查變化的部分。在終端輸入以下命令來啟動Flow服務(wù):npm run flow,首次運行該命令時,服務(wù)啟動并且顯示最初類型檢查結(jié)果。這保證了Flow更高效的增量式工作流。然后接下來每次想要知道檢測結(jié)果,只要輸入flow命令即可。開發(fā)結(jié)束之后,輸入npm run flow stop停止服務(wù)。

Flow的類型檢查是可選的,并不需要一次性檢查所有代碼。你可以選擇你想要檢查的文件,只要在對應(yīng)的JavaScript文件最前面加上帶有@flow標識的注釋即可:/*@flow*/,當你想在已有項目中加入Flow的時候,該特性特別有幫助。因為你可以一一選擇并檢測你要的文件,然后修正錯誤。

三、類型推斷

通常,類型檢查分為以下兩種方式:

通過注釋:事先注釋好我們期待的類型,F(xiàn)low就會基于這些注釋來評估

通過代碼推斷:通過變量的使用上下文來推斷出變量類型,然后根據(jù)這些推斷來檢查類型

第一種方式,我們需要額外編寫只在開發(fā)階段起作用的代碼,最后在代碼編譯打包的階段被剔除。顯然,這種額外添加類型注釋的方式增加了工作量。

第二種方式,不需要任何代碼修改即可進行類型檢查,最小化開發(fā)者的工作量。它不會強制你改變開發(fā)習慣,因為它會自動推斷出變量的類型。這就是所謂的類型推斷,F(xiàn)low最重要的特性之一。

我們來通過一個例子來說明這個特性:

/*@flow*/function foo(x) { return x.split(’ ’);}foo(34);

當你在終端運行npm run flow命令的時候,上述代碼會報錯,因為函數(shù)foo()的期待參數(shù)是字符串,而我們輸入了數(shù)字。錯誤信息類似如下:

index.js:4 4: return x.split(’ ’);^^^^^ property `split`. Property not found in 4: return x.split(’ ’); ^ Number

上述信息清楚地指出了出錯位置和錯誤原因。我們只要將參數(shù)變成字符串,即可修正錯誤。該例想說明的是,因為split()方法只適用于string類型的變量,所以x應(yīng)該是string,這就是類型推斷。

四、空類型

Flow處理null的方式與其他類型庫不同。它不會忽略null,這樣可以防止了因給變量傳了null而導(dǎo)致程序崩潰的錯誤。

/*@flow*/function stringLength (str) { return str.length;}var length = stringLength(null);Flow會報錯。為了防止出錯,我們需要單獨處理null。/*@flow*/function stringLength (str) { if (str !== null) { return str.length; } return 0;}var length = stringLength(null);

代碼中我們引入對null的檢查,確保代碼能在任何情況下都正常且正確運行。上述代碼可以通過Flow的類型檢查。

五、類型注釋

如上所述,類型推斷是Flow最有用的特性之一,不需要編寫類型注釋就能獲取有用的反饋。但在某些特定的場景下,添加類型注釋可以提供更好更明確的檢查依據(jù)??紤]以下代碼:

/*@flow*/function foo(x, y){ return x + y;}foo(’Hello’, 42);

Flow檢查上述代碼時檢查不出任何錯誤,因為+即可以用在字符串上,也可以用在數(shù)字上,我們并沒有明確指出add()的參數(shù)必須為數(shù)字。

在這種情況下,我們可以借助類型注釋來指明期望的類型。類型注釋是以冒號:開頭,可以在函數(shù)參數(shù),返回值,變量聲明中使用。如果我們在上段代碼中添加類型注釋,就會變成如下:

/*@flow*/function foo(x : number, y : number) : number { return x + y;}foo(’Hello’, 42);

現(xiàn)在Flow就能檢查出錯誤,因為函數(shù)參數(shù)的期待類型為數(shù)字,而我們提供了字符串。Flow報錯信息類似如下:

index.js:7 7: foo(’Hello’, 42); ^^^^^^^ string. This type is incompatible with the expected param type of 3: function foo(x : number, y : number) : number{ ^^^^^^ number

如果傳入的參數(shù)是數(shù)字,就不會有錯誤。類型注釋在大型復(fù)雜的JavaScript文件中也很有用,它能保證代碼按照預(yù)期進行。

六、Flow能支持的其他更多類型注釋。

其實說到底就是類似java那種強語言類型的寫法,給每個變量聲明是什么類型,給每個函數(shù)聲明返回值類型,給每個數(shù)組元素聲明類型等,就是仿造java的寫法,哈哈,java傳值不對時就會給你報錯一樣的道理

1、函數(shù)

/*@flow*/function add(x : number, y : number) : number { return x + y;}add(3, 4);

上述代碼展示了變量類型注釋以及函數(shù)類型注釋。函數(shù)add()的參數(shù),以及函數(shù)的返回值,期待類型為數(shù)字。如果傳入其他類型參數(shù),F(xiàn)low就會檢測到錯誤。

2、數(shù)組

var foo : Array<number> = [1,2,3];

數(shù)組類型注釋的格式是Array<T>,T表示數(shù)組中每項的數(shù)據(jù)類型。在上述代碼中,foo是每項均為數(shù)字的數(shù)組。

3、類

下面展示了類和對象的類型注釋模型。唯一需要注意的是,可以在兩個類型之間使用或邏輯,用|來間隔。變量bar1添加了必須為Bar類的類型注釋。

class Bar{ x:string; // x should be string y:string | number; // y can be either a string or a number constructor(x,y){ this.x=x; this.y=y; }}var bar1 : Bar = new Bar('hello',4);

4、對象字面量

對象的類型注釋類似于類,指定對象屬性的類型。

var obj : {a : string, b : number, c: Array<string>, d : Bar} = { a : 'hello', b : 42, c : ['hello', 'world'], d : new Bar('hello',3)}

5、Null

若想任意類型,T可以為null或者undefined,只需類似如下寫成 ?T 的格式即可。

/*@flow*/var foo : ?string = null;

此時,foo可以為字符串,也可以為null。

目前我們只對Flow的類型注釋做了很淺的探索。一旦你習慣了使用這些基本類型,建議在Flow官網(wǎng)上的類型文檔深入了解所有的類型。

七、庫定義

我們經(jīng)常需要引入第三方庫,F(xiàn)low檢查時就會拋出錯誤。但這并不是我們期待的錯誤。

慶幸的是,我們不需要修改庫源碼去防止這些報錯。我們只需創(chuàng)建一個庫定義(libdef)。libdef是包含第三方庫聲明的JS文件簡稱。觀察下面的例子:

/* @flow */var users = [ { name: ’John’, designation: ’developer’ }, { name: ’Doe’, designation: ’designer’ }];function getDeveloper() { return _.findWhere(users, {designation: ’developer’});}

Flow會檢查出以下錯誤:

interfaces/app.js:9 9: return _.findWhere(users, {designation: ’developer’}); ^ identifier `_`. Could not resolve name

由于Flow并不認識_,所以會報錯。要解決這個問題,我們需要引入Underscore的庫定義

1、使用flow-typed

flow-typed倉庫包含了眾多流行的第三方庫的libdef。只需在項目根目錄下創(chuàng)建一個名為flow-typed的文件夾,并且下載相關(guān)的定義文件即可。為了進一步簡化,可以用npm的命令行方式一鍵獲取和安裝libdef文件:npm install -g flow-typed

安裝成功之后, 運行flow-typed install來檢查package.json文件,并且下載所有項目中用到的第三方庫的libdef。

2、自定義libdef

如果你用的庫并不在flow-typed倉庫,你可以創(chuàng)建你自己的libdef。本文不會細談自定義libdef,因為很少會有人遇到,感興趣可以查看此文檔。

八、剔除類型注釋

由于額外添加的類型注釋不是正確的JavaScript語法,打包編譯的時候需要在源碼中剔除??梢酝ㄟ^flow-remove-types來剔除,或者如果你已經(jīng)用Babel來轉(zhuǎn)譯JS,你可以使用Babel preset來移除。我們只討論第一種方法。

首先需要安裝flow-remove-types作為項目依賴庫:npm install --save-dev flow-remove-types

然后在package.json文件中添加另一個script入口:

'scripts': { 'flow': 'flow', 'build': 'flow-remove-types src/ -D dest/',}

上述命令將剔除src文件夾下的所有類型注釋,在dist文件夾中保存編譯后的版本。編譯后的文件就是普通的能運行于瀏覽器的JavaScript文件。

到此這篇關(guān)于vue項目配置使用flow類型檢查的步驟的文章就介紹到這了,更多相關(guān)vue flow類型檢查內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Vue
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩影院在线观看| 日韩成人亚洲| 日本国产欧美| 国产精品白丝av嫩草影院| 国产欧美一区二区色老头| 蜜臀av国产精品久久久久| 亚洲1区在线| 中文亚洲免费| 欧美精品一区二区久久| 国产在线视频欧美一区| 国产美女视频一区二区| 性欧美长视频| 婷婷亚洲成人| 日韩视频一区| 精品国产中文字幕第一页| 中文亚洲欧美| 中文字幕一区二区三区四区久久| 久久国产成人| 日韩欧美综合| 99精品视频在线| 国产色播av在线| 婷婷中文字幕一区| 欧美在线观看视频一区| 国产91精品对白在线播放| 欧美日韩第一| 久久亚洲国产| 日韩欧美视频专区| 丝袜美腿诱惑一区二区三区| 国产精品毛片久久| 欧美日韩在线二区| 国产视频一区免费看| 久久性天堂网| 国产视频一区二| 久久精品色播| 色婷婷精品视频| 亚洲精品99| 蜜桃av一区二区| 欧美精品影院| 日韩亚洲一区在线| av不卡在线看| 日本色综合中文字幕| 蜜桃久久久久久| 麻豆中文一区二区| 久久精品动漫| 日本aⅴ精品一区二区三区| 麻豆精品99| 国产精久久一区二区| 国产精品久久久久久久久妇女| 性欧美69xoxoxoxo| 欧美一区二区三区久久精品| 97精品一区二区| 久久国产精品成人免费观看的软件| 亚洲影视一区二区三区| 久久精品欧洲| 亚洲一二av| 婷婷国产精品| 精品国产aⅴ| 亚洲精品黄色| 自由日本语亚洲人高潮| 老司机免费视频一区二区| 国产一区视频在线观看免费| 91精品日本| 国产欧美激情| 精品国产鲁一鲁****| 91精品日本| 亚洲天堂av资源在线观看| 黄色在线网站噜噜噜| 国产精品久久久久久妇女| 日韩国产一区二区| 国产情侣久久| 麻豆久久精品| 91精品国产成人观看| 国产精品18| 日韩福利视频导航| 久久久国产精品网站| 国产精品色网| 久久精品五月| 日韩三区四区| 蜜臀久久99精品久久久久久9 | 涩涩涩久久久成人精品| 日韩久久精品网| 欧美日韩调教| 日韩成人亚洲| 福利在线免费视频| 国产精品欧美在线观看| 亚洲专区欧美专区| 欧美日韩国产免费观看视频| 四虎影视精品| 日本久久成人网| 久久久成人网| 99久久夜色精品国产亚洲1000部| 日韩精品dvd| 欧美性感美女一区二区| 日韩欧美二区| 成人午夜网址| 国产剧情在线观看一区| 日韩一区二区免费看| 在线视频亚洲| 在线观看一区| 久久国产人妖系列| 欧美国产日本| 精品国产aⅴ| 亚洲精品88| 亚洲福利精品| 石原莉奈一区二区三区在线观看| 亚洲伊人影院| 国产欧美日韩精品一区二区免费 | 亚洲一区黄色| 亚洲精品中文字幕99999| 热久久久久久| 精品国产黄a∨片高清在线| 日韩黄色大片| 免费日本视频一区| 国产一区二区三区不卡视频网站 | 日韩精品免费视频一区二区三区| 清纯唯美亚洲综合一区| 国产一区二区三区视频在线| 久久要要av| 久久精品99国产国产精| 91亚洲一区| 日韩精品五月天| 国产综合欧美| 日本少妇一区二区| 在线日韩一区| 97精品97| 美女免费视频一区| 一区二区国产精品| 九色porny丨国产首页在线| 日韩高清国产一区在线| 精品日韩毛片| 日本精品在线中文字幕| 国产精品亲子伦av一区二区三区 | 日本一区二区三区视频在线看| 人人精品久久| 国产一区91| 狠狠久久伊人中文字幕| 99国产精品| 亚洲v在线看| 久久99偷拍| 青草综合视频| 久久亚洲不卡| 天使萌一区二区三区免费观看| 国产精品欧美一区二区三区不卡| 亚洲午夜电影| 日韩免费视频| 国产aa精品| 成人午夜在线| 麻豆中文一区二区| 日韩va欧美va亚洲va久久| 亚洲欧美日韩专区| 丝袜美腿亚洲一区二区图片| 2023国产精品久久久精品双| 一区二区三区视频免费观看| 日韩一区自拍| 99久久99久久精品国产片果冰 | 深夜福利亚洲| 亚洲精品麻豆| 亚洲精品观看| 亚洲欧洲专区| 四虎精品永久免费| 综合国产精品| 国产精品亚洲人成在99www| 欧美午夜网站| 麻豆精品视频在线观看免费| 免费亚洲婷婷| 国产精品黑丝在线播放| 国产伦久视频在线观看| 欧美日韩国产观看视频| 97在线精品| 亚洲黄色免费av| 伊人久久大香线蕉av不卡| 精品中文字幕一区二区三区av| 99国产精品自拍| 天堂精品久久久久| 国产精品第一| 久久电影tv| 中文精品电影| 成人高清一区| 亚洲一区二区小说| 精品一区二区三区中文字幕在线| 日韩精品91| 色综合视频一区二区三区日韩 | 91久久久精品国产| 亚洲精品免费观看| 国产不卡精品| 国产精品毛片在线看| 亚洲精品欧美| 久久字幕精品一区| 亚洲欧美不卡| 中文字幕人成乱码在线观看| 欧美精品一区二区三区精品| 国产精品嫩模av在线| 成人日韩在线| 日韩va亚洲va欧美va久久| 免费高潮视频95在线观看网站| 久久最新视频| 久久亚洲精品中文字幕蜜潮电影| 日韩av黄色在线| 欧美.日韩.国产.一区.二区| 久久精品国语|