在哪里放置JS“构建输出”

Where to put JS "build output"

本文关键字:输出 构建输出 构建 JS 在哪里      更新时间:2023-09-26

我有一个NodeJS项目,它有一些服务器端和客户端,都是用ES2015编写的,并使用Babel编译为ES5,由Gulp执行。

来自 Java 领域,我让构建过程将结果放在一个 dist 文件夹中,所以目录结构如下所示:

./node_modules。/客户。/服务器。/静态的./dist/client #/client 编译的结果./dist/server #/server 编译的结果

现在这有点丑陋,因为有些东西落在不同的地方,不同的深度。你会遇到各种各样的问题。仔细计算进口中的点。使用__dirnameprocess.cwd()得到相对于正确"根"的东西。以丑陋的路径运行应用程序,如node dist/server/server.js。等等。

您通常如何解决此问题?您是否将编译结果放在同一级别,位于不同的目录名称中:

./build-client./build-server

别的?

你遇到了各种各样的问题

你能具体列举这些吗?我个人认为这种结构没有问题。

__dirname

无需

使用__dirname进行导入。如果使用相对路径执行导入,则隐含__dirname。使用相对路径是惯用的东西。它也更好,因为__dirname将是绝对的,因此是特定于系统的,因此存在部署/共享问题。

虽然从技术上讲,你可以将它用于 CommonJS 模块,并且 babel 甚至可能支持它,但 ES2015 要求导入是静态字符串,所以当 node 最终原生支持 ES2015 模块时,任何不是静态字符串的东西都可能不受支持。

process.cwd((

这不能使用,因为它会导致您的程序在大多数情况下失败,除了您之外的任何人尝试运行它并且碰巧不在正确的目录中。这也不适用于ES2015。


总的来说,我的建议是

一个。如果您的客户端和服务器代码大多是分开的,并且相对路径大多只是在目录中./../,那很好,只需调整以适应它即可。

二.如果您通常在客户端和服务器之间导入,则代码是耦合的,您可能会重新考虑客户端/服务器是否是分隔代码的正确轴。如果您的应用程序是高度"同构"的,只需重新构建代码以反映代码中存在的实际耦合,您自然会最小化所需的../../路径的深度。

的主要痛点实际上是将输出嵌套在"dist"目录中,我想知道通常如何解决这个问题

您无需在源代码中解决此问题。您的客户端捆绑器(webpack,browserify或类似(将使用节点需求算法自动使用npm中的处理第三方依赖项。如果你有一个非 npm 供应商的依赖项,只需使用相对路径引用它,你的捆绑器就会处理它。

如果您需要进一步的帮助,我建议您使用指定的路径、工具和详细信息将您的问题从通用重新格式化为非常具体,以便我们可以直接评论您的情况,而不是假设/通用的东西。