精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

JSDev:一個優化JavaScript開發過程的小工具

開發 前端
JSDev 是老道(Douglas Crockford)最近搞的一個不太起眼的小玩意,他的大致思路是,對 JavaScript 做預處理,選擇性地把注釋轉為相應的代碼。

JSDev 是老道(Douglas Crockford)最近搞的一個不太起眼的小玩意,他的大致思路是,對 JavaScript 做預處理,選擇性地把注釋轉為相應的代碼。JSDev 處理的注釋塊有以下兩種形式:

  1. /*<tag> <stuff>*/ 
  2. /*<tag>(<condition>) <stuff>*/ 

然后你可以指定 JSDev 開啟哪些 tag,JSDev 就會把這塊注釋改成相應的代碼,而這些注釋在 JavaScript 正常運行的時候是不會起作用的,在用 JSMin 等工具壓縮后也都會全被去掉,這樣就方便了 JavaScript 的開發。

一開始,老道只給出了 C 語言版本的程序,幾天后他給出了 JavaScript 版本,我覺得這開始變得有意思了,折騰了兩天,想試看能否用到今后的開發項目中去。下面我們先以 C 程序為例說明 JSDev 的用法,然后說說怎樣通過 JavaScript 版本把它用在 node 開發或者前端開發過程中。本文假定你在類 Unix 系統(Linux/FreeBSD/Mac OS)下工作并且對命令行、node 編程都有一定了解。

C 語言版本 和 JSDev 的用法

先從 github 上 clone 我的 fork,把 C 源碼編譯成可執行文件。

  1. git clone https://github.com/yuest/jsdev.git #clone github 上的源代碼到本地  
  2. cd jsdev  
  3. gcc jsdev.c #編譯 C 版本  
  4. sudo mv a.out /usr/local/bin/jsdev #把編譯好的可執行文件移動到一個 $PATH 底下的目錄 

現在我們就可以用 jsdev 來運行程序了??墒窃诿钚休斎?jsdev 并回車,卻什么都沒有,原來老道只做了這工具最核心的部分,而未在軟件界面下什么功夫,所以連個命令用法提示也沒有。作為預處理器,它只會從 stdin 吃進 JavaScript 代碼,然后把處理過的代碼從 stdout 拉出來,至于文件操作嘛,用 unix 命令行的管道特性就可以啦。

普及一下,要把文件,比如說 in.js 當 stdin 輸入到 jsdev 程序,使用小于符號 < 就行,如 jsdev <in.js,而輸出就是用大于符號 > 啦:jsdev <in.js >out.js 就可以。如果要嘗試 jsdev,只需要用 jsdev <in.js 就可以把結果輸出到屏幕上方便查看,或者你甚至可以配合使用 echo 命令來測試簡單的單行代碼。如 echo "/*tag 'stuff'*/" |jsdev tag

只運行 jsdev <in.js >out.js 這個命令不會對 in.js 有任何改動,我們需要以 tag 為參數調用 jsdev 命令來指定需要開啟的 tag,多個空格間用空格分開。以例子來說明,如果 in.js 代碼如下:

  1. /*hello console.log('Hello, World!')*/ 
  2. /*hi console.log('Hi, there.')*/ 

那么 jsdev <in.js hello 會輸出如下代碼:

  1. {console.log('Hello, World!')}  
  2. /*hi console.log('Hi, there.')*/ 

而 jsdev <in.js hello hi 則是:

  1. {console.log('Hello, World!')}  
  2. {console.log('Hi, there.')} 

這里的花括號是為了避免與程序中其他部分發生關聯而加的,主要問題是 JavaScript 有行尾自動插入分號的設計,如果不加花括號把上下文隔開,可能會與前后行產生關聯,比如變成上一行的函數調用之類?;ɡㄌ枌嶋H上是把多個語句復合成一個語句,最常見的地方是用在 if 等僅接受一個語句的關鍵字后。JavaScript 里面的花括號不會產生一個命名空間。

你可以為 tag 指定一個函數名,于是此 tag 指定的注釋塊就會被這個函數名 wrap(有點像 JSONP),如以下 in.js:

  1. /*log some_variable*/ 

用命令 jsdev <in.js log:console.log 輸出的是:

  1. {console.log(some_variable);} 

這可以用于調試代碼時打印當時狀態下的某些變量值,會比較方便。

另外還可以為注釋塊指定條件,如下的 in.js:

  1. var name = 'Yuest' 
  2. /*hello console.log('Hello, World!')*/ 
  3. /*hello(name === 'Celine') console.log('Hello, Celine!')*/ 

用命令 jsdev <in.js hello 輸出:

  1. var name = 'Yuest' 
  2. {console.log('Hello, World!')}  
  3. if (name === 'Celine') {console.log('Hello, Celine!')} 

如果運行這段代碼,很顯然只會輸出 Hello, World!。

指定函數和條件也可以同時使用,如:

  1. var name = 'Yuest' 
  2. /*log 'Hello, World!'*/ 
  3. /*log(name === 'Ling') 'Hello, Ling!'*/ 

用命令 jsdev <in.js log:console.log 輸出:

  1. var name = 'Yuest' 
  2. {console.log('Hello, World!');}  
  3. if (name === 'Ling') {console.log('Hello, Ling!');} 

和前面幾乎是一樣的,但注釋短了不少。以上就是關于 JSDev 使用方法的一切了。其實最核心的是 /*<tag> <stuff>*/ 這種形式,我們可以完全只用這種形式來達到上面一樣的目的:

  1. var name = 'Yuest' 
  2. /*hello console.log('Hello, World!')*/ 
  3. /*hello if (name === 'Ling') {console.log('Hello, Ling!')}*/ 

上面的代碼用命令 jsdev <in.js hello 輸出:

  1. var name = 'Yuest' 
  2. {console.log('Hello, World!')}  
  3. {if (name === 'Ling') {console.log('Hello, Ling!')}} 

所以可以看出,為 tag 指定函數名和條件只是做了一些簡化而已。

哦對了,還忘了 jsdev 命令接受一個 -comment 參數為輸出的文件頭部添加注釋,如對于上面的 in.js 文件,運行一下命令:

  1. jsdev <in.js hello -comment "Author: Yuest" -comment "This is a temporary file generated by JSDev" 

會獲得:

  1. // Author: Yuest  
  2. // This is a temporary file generated by JSDev  
  3. var name = 'Yuest' 
  4. {console.log('Hello, World!')}  
  5. {if (name === 'Ling') {console.log('Hello, Ling!')}} 

嗯,以上就真的是關于 JSDev 用法的一切了,而關于要如何用好它,則需要他的使用者有一點想象力。比如,你可以寫一些 bash 腳本什么的。下面說說 JavaScript 版本的 JSDev 以及我想到的用在 node 項目的方法。

JavaScript 版本和 node 中用法

老道給出的 jsdev.js 里面只定義了一個 JSDEV 函數,接受三個參數,***個參數是要處理的源代碼,第二、三個參數是兩個數組,分別指定 tag 和注釋。如果上面***一條命令用 JavaScript 版本來處理,就應該是:

  1. JSDEV( input  
  2.      , ['hello']  
  3.      , ['Author: Yuest''This is a temporary file generated by JSDev']) 

我的 fork 為 node 加上了 exports.JSDEV = JSDEV,并 publish 到 npm 上了,你只需 npm install jsdev 或者在 package.json 里面加上 jsdev 的依賴,并在源碼里

  1. var JSDEV = require('jsdev').JSDEV 

就可以使用 JavaScript 版本的 JSDEV() 函數了。

因為 node 可以通過修改 module.constructor.prototype._compile 來修改要載入的文件,非常適合拿來應用 JSDev 這種預處理器。我的想法是,一個文件要開啟哪些 tag 下的注釋塊,應該在其自身(也是用注釋)來描述。如果程序載入了 jsdev 并調用其 replaceRequire 方法(require('jsdev').replaceRequire()),之后再 require 進的文件有 //@jsdev tag1 tag2 這樣的注釋,就會用 jsdev 開啟 tag1、tag2 指定的注釋塊。

指定開啟 tags 的規則這樣寫:

  1. //@jsdev(test,production) tag1 tag2  
  2. //@jsdev(development) tag3 

以上注釋行表示在環境變量 NODE_ENV=test 或 NODE_ENV=production 的時候開啟本文件的 tag1 tag2 注釋塊,在 NODE_ENV=development 時開啟 tag3 注釋塊。如果沒有 jsdev 后面的括號,默認是 development,因此可以寫成

  1. //@jsdev(test,production) tag1 tag2  
  2. //@jsdev tag3 

例如有 a.js:

  1. require('jsdev').replaceRequire()  
  2. require('./b'

b.js:

  1. //@jsdev(test,production) hello  
  2. //@jsdev hi  
  3. /*hello console.log('hello')*/ 
  4. /*hi console.log('hi')*/ 

則運行 node a.js 會輸出 hi,而運行NODE_ENV=test 則會輸出 hello

另外,對于前端開發也是一樣的,有 replaceStatic() 函數,可以替換 connect/express 的 static middleware。這樣就可以預處理通過 static middleware 返回到瀏覽器的 js 文件。文件內 tag 開啟的規則和前面寫的一樣。需要注意的是要在使用 connect.static(root) 之前調用 replaceStatic()。

更多的例子可以參考我寫的測試,在遷出的代碼中 ./runtests (當然要確保 npm 依賴已經安裝,即在目錄下運行 npm install)就可以運行測試。我在這里提供這個很通用的工具的用法,要怎樣用好它(什么環境設定什么 tag 之類),就要靠用戶的想象力了吧。

有不足的地方歡迎指證,可以到 github 里面去提 issue。

原文:http://club.cnodejs.org/topic/4f3b65a1b43c3c846a05518c

【編輯推薦】

  1. JavaScript MVC框架backbone.js初探
  2. JavaScript繼承詳解
  3. 8個***的JavaScript腳本資源強烈推薦
  4. 10個強大的JavaScript表單驗證插件
  5. 20個將JavaScript推到***的網站
責任編輯:陳貽新 來源: CNode
相關推薦

2022-12-28 12:29:45

duf命令

2017-07-25 14:20:13

戴爾配置功耗

2011-05-03 10:17:25

CSS

2013-03-29 14:46:33

App開發小工具輔助工具

2022-03-30 15:11:26

Python房價工具

2021-05-10 11:06:31

Python工具代碼

2020-11-26 12:05:44

Python小工具代碼

2021-05-20 11:30:17

Python工具代碼

2019-12-03 10:19:34

開發者技能工具

2023-04-26 01:21:34

工具URL地址

2021-11-02 15:07:22

Web前端開發

2017-05-23 20:44:36

Linux緩存工具

2019-07-11 15:24:30

開發者技能工具

2020-08-25 20:10:53

GitHub代碼開發者

2022-05-17 16:56:33

開發工具前端

2009-11-19 08:48:10

Windows 7桌面工具

2010-06-02 10:00:25

MySQL工具

2024-09-24 17:54:26

Python開發

2021-11-05 06:57:50

架構工具代碼

2015-03-26 10:34:02

Android開發工具
點贊
收藏

51CTO技術棧公眾號

日韩精品一二三四| 午夜先锋成人动漫在线| 亚洲人一二三区| 成人高清在线观看| 国产一级做a爱片久久毛片a| 一本久久青青| 777a∨成人精品桃花网| 日本a在线天堂| 免费在线性爱视频| 精品亚洲国产成人av制服丝袜| 欧美成人免费网| 国产传媒第一页| 伊人久久大香| 婷婷国产v国产偷v亚洲高清| 中文网丁香综合网| 手机亚洲第一页| 国产美女av一区二区三区| 51视频国产精品一区二区| 成人信息集中地| 日韩精品丝袜美腿| 欧美精品xxxxbbbb| 少妇高潮喷水久久久久久久久久| 精品黄色免费中文电影在线播放 | 中文字幕22页| 高潮在线视频| 亚洲色图第一区| 日本一区视频在线播放| 隣の若妻さん波多野结衣| 麻豆精品蜜桃视频网站| 青青草一区二区| 在线看成人av| 午夜精品久久| 色偷偷av一区二区三区| 我和岳m愉情xxxⅹ视频| 亚洲精品一区二区三区在线| 在线播放中文一区| 欧美男女交配视频| 欧洲一级精品| 日韩欧美精品免费在线| 精品无码国产一区二区三区av| 黄色av电影在线观看| 国产精品天干天干在线综合| 欧美成人综合一区| 婷婷在线免费观看| 国产成人av一区二区三区在线观看| 国产精品私拍pans大尺度在线| 亚洲欧美自拍视频| 国产精品日韩| 91av在线免费观看| 一级aaa毛片| 伊人久久亚洲影院| 久久露脸国产精品| 不卡的免费av| 伊人久久亚洲美女图片| 久久久久久久久久久亚洲| 久久久久久国产精品视频| 欧美福利网址| 国模精品视频一区二区| 国产亚洲精品久久777777| 欧美日韩一卡| 久久久久久91香蕉国产| 久久久无码一区二区三区| 欧美激情一级片一区二区| 萌白酱国产一区二区| www欧美com| 欧美涩涩网站| 午夜精品国产精品大乳美女| 国产性xxxx高清| 亚洲永久免费精品| 国产精品吹潮在线观看| 一区二区视频播放| 国模无码大尺度一区二区三区| 亚洲一区二区三区成人在线视频精品| 国产乱色精品成人免费视频| 国产九色精品成人porny| 翡翠波斯猫1977年美国| 天堂在线免费av| 国产色91在线| 超碰在线免费观看97| 日本h片在线观看| 欧美日韩中文字幕日韩欧美| 国产自偷自偷免费一区 | 99国产精品自拍| 日本精品一区二区三区在线播放视频| 国产乱码在线观看| 国产精品亚洲成人| 免费精品视频一区二区三区| 欧美精品videos另类| 亚洲激情图片qvod| 97在线免费公开视频| 中韩乱幕日产无线码一区| 91.成人天堂一区| 五月天激情小说| 欧美三级三级| 欧美激情一区二区三级高清视频| 国内自拍视频在线播放| 国产揄拍国内精品对白| 精品视频一区在线| 色大18成网站www在线观看| 一级日本不卡的影视| 虎白女粉嫩尤物福利视频| 亚洲综合伊人| 亚洲美女激情视频| 中文字幕在线有码| 日韩国产一区二| 产国精品偷在线| www.av在线| 午夜国产不卡在线观看视频| 日韩一级免费片| 日韩aaa久久蜜桃av| 久久精品最新地址| 亚洲熟妇无码乱子av电影| 国产一区二区不卡在线| 欧美精品一区二区三区久久| av在线播放国产| 欧美色图免费看| 国产人妻人伦精品1国产丝袜| 四虎国产精品免费观看 | 免费视频成人| 亚洲品质视频自拍网| 免费观看一级视频| 国产一区二区三区在线观看免费视频| 欧美日韩国产综合视频在线| 男女在线观看视频| 欧美放荡的少妇| 日本精品在线观看视频| 国产精品外国| 国产精品二区三区四区| 黄色网页在线免费看| 在线中文字幕一区二区| 好吊一区二区三区视频| 尹人成人综合网| 亚洲最大成人网色| 日本中文字幕在线看| 91极品美女在线| www.久久国产| 国产精品vip| 99精品在线直播| av网址在线免费观看| 欧美日本在线视频| 一区二区三区在线播放视频| 视频一区国产视频| 欧美精品与人动性物交免费看| 草草在线视频| 亚洲国产精品人人爽夜夜爽| 久久免费公开视频| 国产成人a级片| 日韩xxxx视频| 国产+成+人+亚洲欧洲在线| 精品中文字幕在线观看| а√中文在线资源库| 一区二区三区四区国产精品| 人妻体体内射精一区二区| 一区二区国产在线| y111111国产精品久久婷婷| a黄色片在线观看| 精品国产欧美一区二区| 日本午夜精品理论片a级app发布| 成人午夜视频网站| 日本在线xxx| 亚州国产精品| 国产成人黄色av| 香蕉视频在线看| 在线播放国产精品二区一二区四区| 免费精品在线视频| 国产伦精一区二区三区| 台湾无码一区二区| 好吊妞国产欧美日韩免费观看网站 | 国产在线欧美日韩| 最新日韩精品| 中文字幕亚洲第一| 国内老熟妇对白hdxxxx| 亚洲大片在线观看| 日韩人妻无码一区二区三区| 日韩激情在线观看| 91精品国产吴梦梦| 国产乱论精品| 国产精品美女免费看| 黄色成人在线| 日韩精品视频在线观看免费| 欧美 亚洲 另类 激情 另类| 中文字幕亚洲精品在线观看 | 在线观看亚洲一区二区| 亚洲免费观看视频| 800av在线播放| 日韩av在线播放中文字幕| 国产四区在线观看| 三级小说欧洲区亚洲区| 国产日韩精品综合网站| 日本一本在线免费福利| 亚洲男人天天操| 国产v在线观看| 色综合天天性综合| avtt天堂在线| 久久久久88色偷偷免费| 日韩av成人网| 免费不卡在线视频| 欧美又粗又长又爽做受| 成人在线电影在线观看视频| 国产伦精品一区二区三区高清版| 午夜精品成人av| 欧美精品在线网站| 国产高清视频在线| 亚洲成年人在线播放| 日本成人一级片| 亚洲午夜久久久久| 女同久久另类69精品国产| av影院午夜一区| 亚洲天堂av一区二区三区| 性欧美xxxx大乳国产app| 咪咪色在线视频| 亚洲调教一区| 国产亚洲情侣一区二区无| 四虎在线精品| 国产成人黄色av| 天堂电影一区| 久久久久久网站| 国产丝袜在线| 中文在线不卡视频| 噜噜噜噜噜在线视频| 精品剧情在线观看| 国产日产亚洲系列最新| 欧美丝袜丝nylons| 亚洲天堂一区在线观看| 午夜国产精品影院在线观看| 农村妇女精品一区二区| **性色生活片久久毛片| 亚洲色成人网站www永久四虎| 成人福利电影精品一区二区在线观看| 中文av字幕在线观看| 日韩国产欧美一区二区三区| 内射国产内射夫妻免费频道| 国产精品videosex极品| 久久福利一区二区| 欧美粗暴jizz性欧美20| 六月婷婷激情网| 欧美wwwww| 亚洲欧洲一二三| 欧美熟乱15p| 天堂精品视频| av中文一区| 日韩av高清| av中字幕久久| 亚洲美女网站18| 日韩激情在线| 一区二区视频在线免费| 99精品国产一区二区三区| 日本午夜精品一区二区| 精品一级毛片| 亚洲v欧美v另类v综合v日韩v| 国产一区二区精品福利地址| 欧美三级网色| 第九色区aⅴ天堂久久香| 亚洲不卡一卡2卡三卡4卡5卡精品| 欧美人妖视频| 欧美日产一区二区三区在线观看| 蜜桃a∨噜噜一区二区三区| 欧美1o一11sex性hdhd| 欧美日韩色图| 中文字幕精品在线播放| 欧美黄色精品| 日本欧美视频在线观看| 欧美一级播放| 中文字幕在线观看第三页| 蜜桃传媒麻豆第一区在线观看| 小明看看成人免费视频| 国产剧情在线观看一区二区| 国产精品果冻传媒| xnxx国产精品| 女教师淫辱の教室蜜臀av软件| 亚洲欧美日韩中文播放| 日韩av在线电影| 在线看国产一区二区| 亚洲综合精品国产一区二区三区| 欧美一区二区三区白人| 韩国中文字幕hd久久精品| 亚洲精品视频在线观看视频| 成人全视频高清免费观看| 久久久国产91| 久草免费在线视频| 国产精品久久久久久亚洲影视| 粉嫩av国产一区二区三区| 国产一区二区三区黄| 欧美精品一区二区久久| 国产一二三四五| 亚洲在线国产日韩欧美| 夜夜夜夜夜夜操| 99视频在线精品| 91无套直看片红桃在线观看| 亚洲综合激情网| 免费av中文字幕| 日韩一二三区不卡| 你懂的视频在线观看| 欧美大成色www永久网站婷| 色一区二区三区| 成人h片在线播放免费网站| 群体交乱之放荡娇妻一区二区| 午夜精品一区二区三区在线观看| 国产精品sm| 久久婷婷综合色| 99精品国产视频| 登山的目的在线| 91久久香蕉国产日韩欧美9色| 精品毛片在线观看| 国产亚洲精品久久久久久777| 怡红院av在线| 国产日韩精品在线播放| 香蕉久久99| 性高湖久久久久久久久aaaaa| 日韩精品亚洲一区| 免费不卡的av| 亚洲欧美经典视频| 一级片在线免费播放| 亚洲国产成人精品久久| 1769免费视频在线观看| 国产精品国产亚洲伊人久久| 黄色网一区二区| 真人做人试看60分钟免费| 蜜桃91丨九色丨蝌蚪91桃色| 女~淫辱の触手3d动漫| 午夜精品久久久久久久99水蜜桃| 国产精品污视频| 色午夜这里只有精品| 午夜激情成人网| 久久波多野结衣| 影音先锋中文字幕一区二区| 亚洲黄色av片| 国产精品免费免费| 成年人视频免费| 亚洲老头同性xxxxx| а√在线中文网新版地址在线| **亚洲第一综合导航网站| 欧美大片aaaa| 日本肉体xxxx裸体xxx免费| 久久精品在线观看| 精品国产午夜福利| 亚洲精品成人久久| sis001亚洲原创区| 国产经品一区二区| 黄色av成人| 白嫩情侣偷拍呻吟刺激| 亚洲一二三区在线观看| 欧美视频一二区| 久久免费高清视频| 黄色成人美女网站| 成人毛片视频网站| 久久综合视频网| 国产精品免费精品一区| 亚洲精品在线观看www| 美女在线视频免费| 裸模一区二区三区免费| 老鸭窝91久久精品色噜噜导演| 欧美 日本 国产| 一本色道综合亚洲| 国产色在线 com| 国产精品一区二区三区免费视频| 久久人体视频| 亚洲精品国产久| 亚洲一二三四区| 日本福利午夜视频在线| 国产成人精品视| 国产国产精品| 91丨porny丨九色| 午夜精品久久久久久久久久| 免费人成在线观看网站| 国产精品福利在线观看网址| 久久一本综合| 人妻激情偷乱视频一区二区三区| 亚洲第一精品在线| 全色精品综合影院| 国产在线观看一区二区三区| 综合精品一区| 免费无码一区二区三区| 色8久久人人97超碰香蕉987| 秋霞成人影院| 官网99热精品| 久久一区二区三区四区五区| 久草福利资源在线| 精品国产91乱码一区二区三区| 一本大道色婷婷在线| 一本久道久久综合| 懂色一区二区三区免费观看 | av伦理在线| 日本高清不卡三区| 国产精品综合二区| 欧美日韩乱国产| 久久精品视频在线播放| 精品综合久久88少妇激情| 国产九九在线观看| 午夜欧美一区二区三区在线播放| 国产在线视频网站| 日韩美女在线视频| 国产传媒在线| 亚洲一区二区三区精品在线观看| 国产99久久久国产精品潘金 | 久久亚洲视频| 日韩a级片在线观看 | 黄色大片在线播放| 美媛馆国产精品一区二区| 国产一区二区在线电影|