![](/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.