我有一个NodeJS项目,它有一些服务器端和客户端,都是用ES2015编写的,用Babel编译成ES5,由Gulp执行。
来自Java领域,我使构建过程将结果放在dist文件夹中,因此目录结构如下所示:
./node_modules ./client ./server ./static ./dist/client # Result of /client compilation ./dist/server # Result of /server compilation
现在这有点难看,因为有些东西落在不同的地方,不同的深度。你遇到各种各样的问题。仔细计算进口中的点数。使用__dirname
与process.cwd()
相对于正确的“根”获取相关内容。使用像node dist/server/server.js
这样的丑陋路径运行应用程序。等等。
您通常如何解决这个问题?您是否会将编译结果放在同一级别的不同目录名称中:
./build-client ./build-server
还有别的吗?
答案 0 :(得分:0)
你遇到各种各样的问题
你能具体列举这些吗?我个人认为这个结构没有问题。
__目录名称
无需使用__dirname
进行导入。如果使用相对路径执行导入,则隐含__dirname
。使用相对路径是惯用的事情。它也更好,因为__dirname
是绝对的,因此是系统特定的,因此有部署/共享问题。
虽然技术上可以将它用于CommonJS模块,而且babel甚至可以支持它,但ES2015要求导入为静态字符串,因此当节点最终本身支持ES2015模块时,任何不是静态字符串的东西都可能不受支持
process.cwd()
这不能被使用,因为它会导致程序在大多数时间失败,而不是你试图运行它并且没有碰巧在正确的目录中。这也不适用于ES2015。
总的来说,我的建议是
一个。如果您的客户端和服务器代码大多是分开的,并且目录中的相对路径大多只是./
和../
,那么它很好,只需调整以适应它。
B中。如果您通常在客户端和服务器之间导入,则代码会耦合,您可能会重新考虑客户端/服务器是否是分隔代码的正确轴。如果您的应用程序具有高度"同构性",只需重新构建代码以反映代码中存在的实际耦合,您自然会最小化所需的../../
路径的深度。
我的主要痛点是将输出嵌套在" dist"目录,我想知道这通常是如何解决的
您不需要在源代码中解决此问题。您的客户端绑定程序(webpack,browserify或类似程序)将使用节点要求算法自动使用npm处理第三方依赖项。如果你有一个非npm销售依赖项,只需用相对路径引用它,你的捆绑器就会处理它。
如果您需要进一步的帮助,我建议您将问题从通用重新格式化为非常具体的路径和工具以及指定的详细信息,以便我们可以直接评论您的情况,而不是假设/通用。