![](/img/trans.png)
[英]What determines the order of `require` calls in babel-transpiled scripts?
[英]Building monorepo babel-transpiled node JS application with dependencies
我正在做一個作為monorepo托管的項目。 為了簡化起見,假設內部有三個不言自明的軟件包: server
, webapp
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.