2017-08-24 50 views
0

我正在構建沒有JS模塊的舊時尚應用程序(是的,全球範圍)。我使用的編譯器選項outFiledeclaration捆綁所有.ts來源單一項目到單個文件和單d.ts文件,這是我從我的其他項目中引用。bundle d.ts without references directive

我開始利用@types,我搬到node_modules到我的項目的根,所以@typesvisible,並自動加載。我還將我的所有項目的&副本d.ts複製到node_modules\@types\,這進一步幫助我在我的項目之間交叉加載聲明。甜。

然後我包括在我的項目之一moment.js和不愉快的事情發生了。這圖書館在node_modules\moment目錄自己的報關文件,並tsc這個附加的d.ts指令\\\ <references...用顯式路徑,其中,很明顯,複製到其他目的地後,不匹配。

如果將會有一些的選項直接附加外部聲明,通過複製,而不是通過引用,進入捆綁包,這將是偉大的!有沒有這樣的事情?

+0

「我搬到node_modules到我的項目的根」你是什麼意思? – gilamran

+0

@gilamran你可以將'library'換成'project',我在Visual Studio(不是Code)中工作,其中項目是常見的概念。它意味着代碼文件夾,您爲某種目的創建了代碼,並將其作爲單個項目工作。所以「我的項目的根」意味着我的項目文件夾的根。 – Vaclav

+0

這與所謂的mono-repo類似。一個文件夾包含許多項目。您不應該將node_modules放在根文件夾上,並將其保留在每個項目上。由於每個項目都有自己的依賴關係。 – gilamran

回答

0

每個項目都應該有自己的node_modules =>依賴關係(包括@types)。

這樣你就不會混合依賴。這部分是非常重要的,因爲你自己經歷過。

您應該使用npm link命令,以便能夠在不改變每次發佈新版本的工作速度快。讀一下它here

關於@types:打字稿自動掃描所有@types的子文件夾和經銷商包括他們(除非你加入typestsconfig),這意味着你的‘全局’模塊應提供給依賴於它的項目。讀到它here

例的多項目結構:

- project1 
    - node_modules 
    - @types 
     - project2 
     - moment 
     - lodash 
    - src 
    - main.ts 
    - tsconfig.json 

- project2 
    - src 
    - library.ts 
    - tsconfig.json 
+0

我的問題是在開發過程中爲IDE加載聲明,而且我不想在每個項目文件夾中都聲明獨立的'node_modules'。我只是利用typescript的自動'@ types'加載功能,否則,根本不需要'node_modules'。如果我可以創建一個沒有'\\ < Vaclav

+0

當你使用'npm'並安裝了'moment'時,你的問題就開始了,如果你不想使用'npm',那麼你沒有問題...如果你想使用'npm'遵循規則,或者你會遇到問題...... – gilamran

+0

我真正需要的是爲我的每個項目構建我自己的'@ types'聲明並在其他項目中加載這些聲明。我目前正在檢查如何實現這一目標。 – Vaclav