我想出瞭如何去做我所需要的。在更新到npm 3.3.9和TypeScript 1.6後,我可以使用postinstall
腳本來實時編譯。原型住在這裏:https://github.com/MrHen/TypeScriptNpm
但最重要的作品是:
// In the module's package.json
"scripts": {
"build": "gulp npmbuild",
"postinstall": "npm run build"
},
和:
// In the server's package.json
"dependencies": {
"hen-doodad": "file:../modules/hen-doodad",
"hen-widget": "file:../modules/hen-widget"
}
和:
// In the gulpfile
gulp.task('npmbuild', function() {
gulp_util.log('Detecting appropriate starting directory...', process.env.INIT_CWD);
var out = process.env.INIT_CWD + '/app';
var build = [process.env.INIT_CWD + '/**/*.ts', 'typings/tsd.d.ts', '!' + process.env.INIT_CWD + '/node_modules/**/*'];
var typings = 'typings/tsd.d.ts';
// ... do typescript build using above paths
感覺就像一個黑客位,但是這比prepublish
工作更一貫。要運行整個事情,請在服務器文件夾內部執行npm install
。
吞嚥任務是可選的。推測你可以直接使用tsc
。
應當指出的是,這肯定是不如何你應該打包起來NPM模塊。我必須這樣做的原因涉及預先存在的構建系統的細節。從做這樣
陷阱:
- 不適合由NPM使用的標準的出版模式。
- 構建的文件僅存在於服務器的node_modules中,根據您對它們所做的操作,這些文件可能會很笨拙。
- 運行npm安裝兩次將不是搶最新的變化。您需要刪除已安裝的模塊或更新模塊上的版本號。
- 每個模塊都有自己的TypeScript構建版本,而不是整體構建。如果您可以一次構建所有內容,則應該這樣做。
- 由於它們如何自動檢測包含在node_modules內的打字文件,因此需要TypeScript 1.6或更高版本。
我們不會發布到NPM。所有這些都在我們的代碼庫中,並且在本地構建/安裝。 – MrHen
編寫一個bash腳本: - /。這不是'npm prepublish'或任何'npm腳本'被設計爲運行的方式。在你的代碼被觸及之前,NPM假定'npm install'應該對'node_modules'內的任何事情做任何事情。 – basarat
一個簡單的編譯腳本是不夠的。我需要他們編譯「按順序」,所以TypeScript需要/類型落實到位。 – MrHen