第一章Node.js 基本介紹——1.3 Eclipse PDT

字號+ 編輯: Snake 修訂: 种花家 來源: 《写给PHP开发者的Node.js学习指南》 2023-09-12 我要說兩句(0)

Eclipse PDT(PHP Development Tools)是一款老掉牙的PHP IDE,用Java編寫你懂的,由Eclipse基金創建。其他的還有Zend Studio、PHPEdit和曾經的Dreamweaver。這篇文章似乎在出了vscode和phpstrom之後已經廢了。當做考古文章看。

學會如何分析堆棧追蹤信息是PHP到Node.js成功轉換的一個重要技能。堆棧追蹤是查找代碼錯誤的一個診斷工具,就像毉生用X光來檢查病人一樣。從某種觀點來看,PHP到Node.js的轉換可以類似於一個複雜的外科手術。你要對PHP和Node.js代碼進行手術。像手術過程一樣,轉換需要技巧和耐性,但是一個好的環境也有很大幫助。就像手術室中使用X光一樣,堆棧追蹤就是轉換過程中開發環境中的工具。下一步,我們會討論集成開發環境,爲轉換過程提供類似“手術室”一樣的環境。

很快你可能就需要面對幾十個PHP文档,成千上萬行的PHP代碼,緊接著,幾十個Node.js文档和成千上萬行的Node.js代碼,一個簡單的文本編輯器無法有效地追蹤所有的内容完成轉換。對於嘗試一個簡單的例子來學習如何使用Node.js編程來說,文本編輯器足夠了,但是在面對大量的PHP和Node.js代碼時,你需要更有效的工具。

在開發PHP或者Node.js本身時,你可能會選擇一個單語言支持的集成開發環境(IDE)直接使用。Eclipse PDT(PHP Development Tools)是一款老的掉牙的PHP IDE,用Java編寫,由Eclipse基金創建。其他的還有Zend Studio、PHPEdit和更加老掉牙的Dreamweaver。對Node.js來說,選擇就比較少了。在寫本書的這個時候,我知道的有Komodo Edit、nide和Cloud9。

然而,你的目標是將PHP代碼移植到Node.js,同步地改進兩個代碼庫並添加新的特性。爲了有效地完成這一過程,我推薦使用Eclipse  PDT,需要做一些修改來支持Node.js。還需要知道的是如何在轉換過程中更容易地對比PHP和Node.js代碼。

現在,在我開始介紹如何爲PHP到Node.js轉換過程設置Eclipse PDT之前,我需要爲那些拒絕使用類似工具堅持使用文本編輯器的開發人員做出聲明。他們說,“我只使用vi”。如果你也是這麽想的,那麽你可以跳過本章其餘的部分然後用任何你覺得對的方法設置你的轉換環境。我會在這裡介紹如何安裝以及配置Eclipse PDT,只是因爲對我來說它是一個非常重要的工具,幫助我將PHP代碼移植到Node.js,對其他開發人員來說這也會是一個非常有用的工具。

要安裝Eclipse PDT,首先下載Java。所有Eclipse IDE都是Java開發的,需要Java運行環境,當然包括Eclipse PDT。我偏向於安裝Java JDK而不是JRE。在編寫本書的這個時間,我使用jdk-6u29-windows-i586.exe。

下一步,瀏覽http://eclipse.org/pdt/downloads。考慮使用Zend  Server  Community  Edition(CE)安裝,這包含了Eclipse PDT、Zend Server HTTP 服務器、内建PHP調試支持,還有MySQL數據庫。我假定你的PHP Web應用使用MySQL數據庫,或者至少可以支持MySQL數據庫。

在寫書的時候,Eclipse  PDT下載頁面上有下載PDT和Zend  Server  Community  Edition的鏈接。如果鏈接不存在了或者你有其他的Web服務器,可以根據你的操作系統下載合適的Eclipse  PDT。然後可以跳過以下幾段,一直到講解安裝和配置Eclipse PDT的段落。按照鏈接下載Eclipse PDT for Zend Server CE。現在,我用的是zend-eclipse-php-helios-win32-x86.zip。解壓但是暫時不要運行Eclipse PDT。

在同一個頁面上,下載Zend  Server  CE。我使用的是ZendServer-CE-php-5.3.8-5.5.0- Windows_x86.exe。

安裝Zend Server CE。簡要來說,一直選擇默認的選項直到Setup Type 頁面。選擇該頁面的Custom按鈕而不是Typical,然後點擊下一步。在Custom Setup頁面勾選“MySQL”Server。然後完成安裝。

到這裡,Zend Server CE會顯示一個瀏覽器頁面來進行配置。我們這種情況並不需要對服務器本身做任何特殊配置。

安裝MySQL 數據庫服務器,並配置其作爲Zend Server CE安裝包的一部分。默認情況下MySQL數據庫服務器root密碼爲空字符串(也就是“”)。

運行Eclipse PDT。Zend Server CE是基於Apache2,有一個htdocs文档夾。當Eclipse PDT運行時,會查找並選擇htdocs文档夾作爲Eclipse PDT的工作空間文档夾。如果你使用Zend  Server  CE或者Apache之外的Web服務器,選擇文档根目錄作爲Eclipse PDT的工作目錄,部署到Web服務器的PHP文档就可以在適當的位置進行修改了。

這並不在本書範圍之内,但是如果你願意,可以在你現有的PHP代碼庫上嘗試使用PHP debugger。

Eclipse PDT和你的Web服務器是你的轉換開發環境的基礎。現在,我們來做一些修改,學習如何使用Eclipse PDT有效地管理和實現轉換過程。

Eclipse PDT本身已經支持JavaScript文档,而Node.js本身就是JavaScript,所以也可以支持Node.js。但是.njs並不是標準的文档擴展名,所以Eclipse PDT並不會認爲.njs文档是Node.js文档。所以如果在Eclipse  PDT裡打開.njs文档(例如,httpsvr.njs),會顯示成文本文档,沒有像一般JavaScript文档(.js)的語法提示顔色,也沒有代碼補充提示。

爲了使Eclipse  PDT將.njs文档作爲Node.js文档,在Eclipse  PDT主菜單裡打開Window菜單,選擇Preferences菜單項;然後你可以看到Preferences對話框,包含兩個窗格(圖1-1)。在左側的窗口,你會看到一個preferences的目錄和子目錄組成的樹形層級結構。右邊的窗口,你會看到一個按左側窗口選定目錄的可以瀏覽和編輯偏好選項的對話框。

在左側窗口中,打開General 文档結構,選擇Content Types選項。在右側窗口中,你會看到content type的列表。在右側窗口中打開Text樹形文档夾。在Text目錄下,選擇JavaScript源文档。當你選擇了JavaScript源文档,你會看到一個列表框,有一個選項“*.js”,在“File associations”列表框中,還有一個Add按鈕在窗口的右中位置。單擊Add按鈕,會彈出Add Content Type Association 對話框(圖1-2)。你可以在“Content type”編輯表中輸入“*.njs”。

然後,在所有打開的對話框上單擊OK按鈕保存修改。

保存修改完成後,對保存爲.njs的Node.js源文档,JavaScript語法高亮和代碼補全功能會生效。

1.jpg

圖1-1    Eclipse  PDT  Preferences對話框

2.jpg

圖1-2    Eclipse PDT Add Content Type Association對話框

語法高亮對.njs文档生效後,你可以通過單詞的錯誤顔色注意到一些簡單的Node.js語法錯誤。對任何編程項目來說,肉眼檢測都是很重要的一部分,尤其是PHP到Node.js的轉換過程。另一個有用的肉眼檢測技術是使用一個先進的可視化對比工具來比較PHP和Node.js代碼,可以看到所有的東西,包括轉換的質量和進度。

對比工具可以顯示兩個文档的差異。簡單的基於文本的對比工具一般會將每個文档的每一行的差異作爲單色的文本輸出。這種對比工具對於分析PHP和Node.js的轉換沒有太大幫助。我們需要更高級一點的對比工具。文档需要並排顯示而不是作爲交替行文本;需要顔色對比,而不是單色;顯示到字符級別的差異而不是只顯示不同行的内容。

Eclipse  PDT内建了一個不錯的可視化對比工具。我們可以使用這個工具來對比一個.php文档和其對應的.njs文档。使用的時候選中.php和.njs兩個文档,右鍵單擊,選擇Compare With 子菜單然後在該菜單内選擇Each Other菜單項。圖1-3是使用Eclipse PDT對比工具對一個簡單的.php文档和對應的.njs文档進行對比的截圖。

3.jpg

圖1-3    Eclipse  PDT對比窗口

你並不需要詳細了解這個特性是如何工作的,只需要看到PHP代碼和Node.js對比相似度即可。

左邊是rand.njs文档,右邊是rand.php文档。文档的差別用灰色顯示,匹配到相似的字符用白色顯示。

注意到有些行幾乎完全是白色,除了一個美元符號($)是灰色。PHP和Node.js在同樣的地方使用同樣的關鍵字function,並且函數名位置也相同。多年以來,這成爲各種新的語言的共性,避免語法結構的變化,採用相似的語法,比如定義函數。同樣,也注意到while語句也基本一致。

這對開發人員來說是有好處的,對比php和.njs文档會變得更容易。

Eclipse  PDT自帶的可視化對比特性很好但是並不絕對可靠。有些時候,在文档中移動代碼則希望可視化對比工具可以找到更多匹配的内容,這就是說,該工具會在兩個文档中顯示更多的白色。在文档中拷貝一個函數的時間與代碼的表現和功能無關,但是可能會使可視化對比工具更精確地進行代碼匹配。在轉換過程中值得花一些時間來嘗試在每個文档中移動代碼,看看會對對比結果産生什麽影響。

在Eclipse PDT中,代碼既可以在單獨的窗口中編輯,也可以在對比窗口中。如果在獨立的窗口中編輯並且保存,任何顯示該文档的對比窗口都會重新加載該文档並且重新進行比對。可視化對比工具的普遍實現都是在獨立窗口中編輯代碼之後對比窗口重新加載。

一般來說,將兩個文档中的代碼保持相同的格式,使用相同的名字(比如函數和變量),包括重構一個或者兩個文档中的代碼,都有助於對比工具找到盡可能多的匹配代碼。

爲了保持PHP和Node.js代碼同步改進和添加新的特性,你需要依賴於對比工具確保PHP和Node.js代碼的正確性。慢慢地,開發人員就可以培養一種感覺知道匹配到什麽程度是最好的。

當匹配度不夠時,對比工具就會偏離其本來的功能,嘗試將.php文档中的PHP代碼和.njs文档中的Node.js代碼進行對比,這並不意味著匹配。會有很多表示差異的灰色的高亮,無法匹配。經常嘗試修改可以糾正這種問題。

當白色高亮太多時,意味著.njs文档中的PHP代碼沒有完全轉換爲Node.js代碼。即使.njs文档可以解析並且運行,太多的白色高亮意味著需要更進一步的轉換。經常對Node.js代碼進行肉眼檢測會發現還沒完成的一些特定轉換。一個很容易忘記的轉換就是給PHP變量加上美元符號($),Node.js變量不需要美元符號。給PHP代碼中加上美元符可以減少白色匹配高亮,使對比工具接近於正確的匹配度。

視覺上的對比,特別是使用對比工具,要比交互式的測試PHP和Node.js代碼快很多。肉眼檢查可以作爲“通菸測試”(Smoke Test)來檢測轉換過程是否接近正確。自動化測試用例,不在本書討論範圍内,可以快速檢測移植的正確性與否。

在本書中,你有機會將一大段特定的PHP代碼轉換爲對應的Node.js代碼元素。例如,PHP中使用array()函數創建數組,而Node.js中,一般使用文字符號,比如花括號,創建數組。在轉換開始時,拷貝了整個.php文档的代碼到.njs文档進行轉換,.njs文档中肯定包含很多PHP array()函數,需要被替換成Node.js對象的符號。一個簡單的處理辦法是使用Eclipse PDT的Find/Replace功能來進行“array(”的全局替換(全部替換爲左半邊花括號)。如圖1-4所示。

4.jpg

圖1-4    Eclipse  PDT  Find/Replace對話框

這個對話框的使用非常簡單。

本書使用文本速記來代替每次說明Find/Replace對話框時的截圖。對上圖中的Find/Replace對話框來說,使用以下文本作爲替換:

Operation: *Flnd/Replace" in Eclipse PDT
Find: array(
Replace: {
Options: Case sensitive
Action: Replace All

有兩種不同的使用Find/Replace對話框方式。

一種方式稱爲無條件(blind)全局查找替換操作。如圖1-4所示。

稱之爲“無條件”是因爲該操作會在文档中一次完成所有查找和替換操作,不提示警告信息,不需要手動干預。如果所有的Find/Replace對話框都經過測試並驗证爲安全的,無條件的全局查找替換操作速度快並且準確。但是,如果結果出現錯誤,只有兩個選擇:撤銷之前的操作或者進行一次新的替換糾正前一次的錯誤。

值得一提的是對於查找和替換糾正工作的第二個選擇。有些時候,一個簡單易於理解的替換操作可能正確地替換了298處代碼,但有兩處替換錯誤,要比一個複雜的查找替換操作正確替換了300處代碼好很多。手動查找和修複一些邊緣案例是值得的,並不是所有的事情都需要完全自動化。即使PHP到Node.js的轉換過程是一個漫長的過程,你也不需要一遍一遍重複操作。本書介紹的並不是“持續轉換”,而是將轉換作爲一次性事件。所以對於完成工作來說完全可以接受手動查找和修複少數邊緣案例。

第二種使用Find/Replace對話框的方式是全局查找單步替換操作。首先,Find/Replace對話框用於查找第一個匹配到的内容所在。開發人員檢查該處是否需要手動修改代碼(可以通過點擊該處代碼而不需要關閉對話框)或者執行替換(點擊Replace/Find按鈕),或者跳過當前所在查找下一處匹配(再次點擊Find按鈕)。以下是單步全局查找替換操作的簡介:

Operation:"Find/Replace" in Eclipse PDT
Find: array(
Replace:{
Otions: Case sensitive
Action: Find, then Replace/Find

Eclipse  PDT中的Find/Replace也可以使用正則表達式。正則表達式是一種模式匹配技術:正則表達式用於描述一種搜索的模式,而不是準確的内容。每次找到匹配模式時,匹配上的内容都作爲待替換區域。比如,如果數組正則表達式\((.*)\)匹配到了array(id=>‘name’),正則表達式中的(.*)則表示内容id=>‘name’。這段内容被稱爲匹配字段,或者有時候被稱爲匹配組。在Eclipse  PDT  Find/Replace對話框中,匹配字段由它周圍的括號決定。爲了使匹配字段成爲替換字段,匹配字段會按照匹配到的順序列舉出來。美元符($)用於描述一個特定的匹配字段,後面的數字表示匹配字段的編號。例如,替換區域中的$1表示第一個匹配字段,在之前的例子中表示id=>‘name’内容。一般情況下都只有一個匹配字段,所以經常使用的都是$1,很少看到$2、$3或者更多的。

以下表示使用正則表達式的無條件查找替換操作:

Operation: "Find/Replace" In Eclipse PDT
Find: array\((.*)\)
Replace: {$1}
Options: Case sensitive, Regular expressions
Action: Replace All

正則表達式的使用不包含在PHP到Node.js的轉換過程中,所以本書並不會介紹如何理解和編寫正則表達式相關的基礎知識。所以正則表達式都是作爲查找替換操作中的一部分,可以拷貝到Eclipse  PDT  Find/Replace對話框中的對應區域,你不需要去理解或者修改這些正則表達式。如果你確實需要正則表達式相關的幫助或者需要理解正則表達式的槼則和它們的工作原理,鼓勵你去研究Eclispse  PDT,使用Google或者其他搜索引擎,查找網頁、部落格或者論壇來回答你的問題。

大部分時候使用正則表達式的查找替換操作比逐字逐句的替換查找(比如只匹配到一個特定的字符串)更容易理解並且效率更高。一個正則表達式可以使匹配的内容更加靈活,並且通過匹配字段,將匹配到的内容作爲Replace字段。一般來說,按字符查找替換一次只能匹配到代碼的開始或結尾,代碼元素的中間部分可能有變化。而正則表達式,中間部分可以匹配某種模式,一次的替換查找操作就可以匹配整個代碼元素。當這種代碼元素的替換可以在一次查找替換的操作中完成,發生錯誤的概率就降低很多。

截止到這裡,本章介紹了如何建立PHP到Node.js轉換環境的一系列操作和相關知識。第一件事是下載Node.js本身,熟悉自帶的兩個命令。之後,通過調試Node.js堆棧追蹤信息來學習如何閲讀堆棧信息以及根據該信息找到定位問題背後真實的深層次的原因。接下來,安裝Eclipse PDT作爲開發環境的基礎,包括對配置的修改使其支持.njs文档,專注於PHP到Node.js的轉換。最後,了解了轉換過程中很重要的可視化對比工具以及查找替換操作。

一個好的開發環境對提高開發效率以及完成工作至關重要。很多時候,業餘的開發人員會陷入在編程的過程中而忽略了開發環境的重要性。最開始的時候,在任何環境下都可以很快開始開發工作,因爲這個時候代碼量較少容易改進。當代碼庫逐漸增長,代碼的複雜度逐步上升,開發的速度就會降下來了。一個低效率的開發環境在複雜度層面上對開發人員沒有任何幫助,但是一個好的開發環境可以幫助開發人員簡化必備的知識維持開發速度,直到項目結束。

在PHP到Node.js的轉換過程中,我們假定已經有一個很大的PHP代碼庫。在轉換結束的時候,期待代碼庫在槼模上可能會翻倍:PHP代碼會因爲轉換進行重構,但不會縮減,所以代碼量會增長。當然,還會添加一個完整的Node.js代碼庫。原始的PHP代碼庫可能由很多人合作開發,但是轉換過程中的耦合太多一般是由一個人完成主要的工作。所以,對原始的PHP代碼一個基本的開發環境也許就足夠了,但是想要移植到Node.js則需要一個更複雜的開發環境。

如果一個項目已經有了一套自己的開發環境,也許不會選擇Eclipse  PDT。Eclipse PDT只是一個可用於轉換的可工作的典型開發環境。其他的開發環境如果支持本章之前提到的各種特性,也可以使用。總而言之,開發環境需要支持.php和.njs文档的語法高亮,對兩個文档進行單次級別的可視化對比而不僅僅是代碼行級別,以及支持正則表達式的查找替換操作。

現在,轉換過程的所有準備工作已經就緒,我們可以開始創建.njs文档來保存新的Node.js代碼。在下一章中,會介紹一個初始.njs文档的模板,之後的章節中,PHP代碼會被重構,複制到Node.js文档中,然後轉換爲可運行的Node.js代碼。

閲完此文,您的感想如何?
  • 有用

    1

  • 沒用

    0

  • 開心

    0

  • 憤怒

    0

  • 可憐

    0

1.如文章侵犯了您的版權,請發郵件通知本站,該文章將在24小時内刪除;
2.本站標注原創的文章,轉發時煩請注明來源;
3.交流群: 2702237 13835667

相關課文
  • JS如何防止父節點的事件運行

  • nodejs編寫一個簡單的http請求客戶耑代碼demo

  • 說一則爲什麽後耑開發人員不選擇node.js的原因

  • 使用Sublime Text3 開發React-Native的配置

我要說說
網上賓友點評