簡體   English   中英

使用依賴項構建monorepo babel編譯的節點JS應用程序

[英]Building monorepo babel-transpiled node JS application with dependencies

我正在做一個作為monorepo托管的項目。 為了簡化起見,假設內部有三個不言自明的軟件包: serverwebapp client和library 目錄結構將類似於以下內容:

the-project 
  packages
    server
      src
    webapp
      src
    library
      src

所有軟件包都使用流類型表示法,使用一些> ES5功能,因此,需要進行babel轉譯。 關鍵區別在於, webapp軟件包的轉譯是通過webpack進行的,而server采用了gulp任務,該任務通過gulp gulp-babel軟件包觸發了腳本的轉譯。 建立web時, library會自動轉譯。

現在,我的問題是要構建server ,babel要求首先構建library ,並要求其package.json指定其(已構建)主JS源文件,以便可以包含其轉譯的工件。 可以想象,如果項目包含多個正在積極開發的庫(確實如此),這將很快成為問題,因為所有庫都需要構建,包括任何依賴包(在這種簡單情況下為server )。

為了克服這種煩惱,我最初考慮使用webpack來構建服務器,它將負責將其所需的任何依賴項都包含到捆綁中,但是我遇到了一些問題,因為顯然webpack不打算在節點JS上使用應用程序。

有哪些策略可用於構建需要Babel轉譯的節點JS應用程序,從而透明地構建應用程序的源文件以及任何依賴項並將其包含在單個輸出目錄中?


附件A

server使用的簡化的gulp任務,用於腳本的翻譯。

return gulp
  .src([`src/**/*.js`], { allowEmpty: true })
  .pipe(babel({ sourceMap: true }))
  .pipe(gulp.dest('dist'));

從上面可以看出,任務中僅包含server自己的源文件。 如果將src更改為也包括library ,則該任務將在server自己的輸出目錄中發出依賴項的工件,並且其中的任何require('library')語句將嘗試在packages/library而不是packages/server/dist查找已構建的工件。 packages/server/dist ,從而導致導入失敗。

首先,我不確定您的服務器在做什么。 如果它正在進行數據庫連接或進行一些計算,那么我不建議由webpack構建webpack 而如果您的服務器只是在進行服務器端渲染並向其他服務器進行一些API調用,那么我建議使用webpack將其捆綁在一起。

許多項目都遵循這種理念。 例如,您可以看看我在一個個人項目[Blubus]中所做的類似事情。 具體來說,您可能對webpack-server-config感興趣。 另外,您還可以了解頻譜等大型項目是如何做到的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM