我已經用了一段時間的coffeescript。現在我需要編寫一個npm包,我可以用coffeescript編寫它,還是我應該將coffeescript編譯爲javascript?我可以在coffeescript中編寫npm包嗎?
回答
我會建議你在coffeescript中編寫你的包,但只發布在JavaScript中。我不喜歡這樣寫道:
- 的CoffeeScript代碼放在
src
- 代碼被編譯爲
lib
src
致力於我的git倉庫,lib
是我.gitignore
lib
發佈到NPM,src
在我的.npmignore
coffee-script
包在我的devDependencies
你可以看看一個簡單的包礦,refix的,靈感:
- https://github.com/linus/refix
npm install refix
我會補充說,在你的包中定義一個'prepublish'任務編譯你的coffeescript的.json是在發佈之前自動完成的一個方便的方法 - 因爲我們都忘記編譯有時。有關更多信息,請參見npm'scripts'文檔:https://npmjs.org/doc/scripts.html – smithclay
我不同意的一點是將lib文件夾保存在'.gitignore'中。在git中保存lib文件夾非常方便,這樣人們可以通過git url來引用你的包。 – ghempton
如果你有一個postinstall任務來編譯你的coffeescript,那麼你不需要在你的git倉庫中檢查.js到'lib /',並且可以安全地添加它來忽略,就像Linus在這裏所說的那樣。請參閱 - https://github.com/ilkosta/static-jade-brunch關於如何使用這些鉤子的示例(以及如何避免全局安裝咖啡標記) –
我從頭開始在CoffeeScript中編寫了npm包。我鼓勵你使用CoffeScript作爲節點以及瀏覽器。但是,在您使用或發佈您的模塊之前,您必須將源代碼CoffeeScript編譯爲JavaScript。不過,這不應該妨礙您使用CoffeeScript。提示:在開發過程中,使用coffee -cw yourfile.coffee
(命令行)觀察文件的變化並在保存時編譯。
你可以寫在CoffeeScript中NPM模塊,但爲了爲了讓JS用戶可以使用它們,必須先將它們編譯爲JS,然後才能在NPM上發佈。
package.json
通過它們的prepublish
腳本掛鉤使您可以輕鬆完成此任務,該腳本掛鉤在發佈之前運行指定的腳本。這裏有一個一prepublish
NPM鉤在zombie.js
https://github.com/assaf/zombie/blob/master/package.json#L16
雖然我不知道這是否是最好的方法,例如技術上是可以寫你的包大多在CoffeeScript的。
基本上,你可以寫一個簡單的包裹coffee
命令JS文件,像這樣:
斌/ howl.coffee
console.log 'Awwwooooo!'
斌/ howl.js
#!/usr/bin/env node
var path = require('path');
var exec = require('child_process').exec;
var coffee = path.resolve(__dirname, '../node_modules/coffee-script/bin/coffee');
var howl = path.resolve(__dirname, './howl.coffee');
var command = coffee + ' ' + howl;
exec(command, function(error, stdout) {
if (error) { throw error };
console.log(stdout);
});
正在運行node howl.js
(或簡單地說howl
當它全球安裝)現在將輸出Awwooooo!
。您可以通過將它們從JavaScript「包裝器」傳遞給CoffeeScript來執行其他CoffeeScript文件和訪問參數require
之類的操作。
無論如何,可能有理由不這樣做,但它迄今爲止工作,所以我想提出這個額外的角度。
對於使用此技術的簡單示例項目,請查看https://www.github.com/joshuabc/packdown。
對於您的具體示例,不需要使用exec。您可以使用require('coffee-script/register'),它會註冊一個全局處理程序,以便自動編譯咖啡依賴關係。由於全局咖啡腳本可能與其他版本衝突,所以對於圖書館來說這不是一個好習慣 – Diego
以前的例子變成:require('coffe-script/register'); var howl = require('./ howl'); – Diego
好點迭戈。關於這個的更多細節:'coffee-script/register'取決於不推薦使用的[require.extensions](http://nodejs.org/docs/latest/api/globals.html#globals_require_extensions)。根據nodejs.org:*「由於Module系統被鎖定,此功能可能永遠不會消失,但它可能有微妙的錯誤和複雜性,最好保持不動。」*該功能[不太可能從咖啡中刪除本身](https://github.com/jashkenas/coffeescript/issues/3692),但在我看來,棄用是一個很好的理由。 – joshuarh
如果您的許多模塊在其devDependencies
的coffee-script
中有效,只需全局安裝coffee-script
而不是爲每個模塊安裝(需要更長的時間)。
coffee-build是coffee-script
的全球版本管理器。
只是這2個腳本添加到您的package.json
:
{
"name": "my-coffee-module",
"scripts": {
"build": "coffee-build -v 1.11.x -b -o js src",
"postinstall": "npm run build"
}
}
注意如何-v 1.11.x
是不是一個確切的版本,它允許隱式的升級。
唯一的缺點是用戶必須先安裝npm install -g coffee-build
才能安裝模塊。
- 1. 可以在CoffeeScript中編寫Protovis代碼嗎?
- 2. 我可以在Heroku中運行coffeescript嗎?
- 3. 我可以不使用npm工具下載NPM軟件包嗎?
- 4. 使用「do」在coffeescript中編寫閉包
- 5. 我可以在'npm install'中設置npm使用的編譯庫路徑嗎?
- 6. 當npm包可以重複安裝嗎?
- 7. CoffeeScript如何在CoffeeScript中編寫?
- 8. 我可以使用ES6開發Atom編輯器包嗎? (不是CoffeeScript)
- 9. 我可以使用PowerShell編寫WebService嗎?
- 10. 是否可以在CoffeeScript中編寫匿名平方函數?
- 11. 我可以在字節碼中編譯我的R包嗎?
- 12. 我可以重寫URL npm從哪裏抽取包?
- 13. 我可以在常規.NET項目中使用.NET Core編寫的Nuget包嗎?
- 14. 我可以在Java中編寫包含連字符的變量名嗎?
- 15. npm包可以在Nexus倉庫中有組值嗎?
- 16. 我可以在XPath中寫短路嗎?
- 17. 我可以在eco中使用Coffeescript`switch`塊嗎?
- 18. 我可以在項目中混合使用JS和CoffeeScript嗎?
- 19. 我可以在render.js上執行的視圖中使用CoffeeScript嗎?
- 20. VBA MS Excel:我可以在模塊中編寫UserForm代碼嗎?
- 21. 我可以在PHP內部的JavaScript中編寫PHP嗎?
- 22. 我可以在Typescript中編寫一個演員操作符嗎?
- 23. 我可以在JavaScript中編寫Selenium測試嗎?
- 24. 我可以在ajax代碼中編寫SQL更新嗎?
- 25. 我可以在Drupal中編寫自己的HTML代碼嗎?
- 26. 我可以在groovy中編寫spring java測試嗎?
- 27. 我可以在CxxTest中編寫自定義斷言嗎?
- 28. 我可以在宏中編寫模板類嗎?
- 29. 我可以在netbeans6.9.1中編寫scala代碼嗎?
- 30. 我可以在Perl中編寫ISAPI過濾器嗎?
另請參閱:http://stackoverflow.com/questions/26196595/how-do-i-compile-coffeescript-before-publishing-to-npm –