我想为我的JavaScript项目创建一个清晰的架构。该项目由一个Node.js服务器和两个不同用途的Angular.js前端组成。我使用自定义grunt构建来构建前端。构建结果是每个项目一个单一的HTML文件和两个压缩/混淆的CSS和JavaScript文件。然后,每个前端都在一个独立的最小化版本的Node服务器上运行(仅提供静态文件服务)。
到目前为止,一切都很清楚。现在的目标是使每个核心项目都能添加插件模块。一个模块应该扩展任何一个项目的JavaScript。这意味着例如在一个前端中添加一个附加的angular模块到angular配置。我已经知道在核心应用程序中添加angular模块代码的位置和方法。
问题现在是:如何在多个项目之间创建合理的构建过程,同时还依赖于插件模块?我想出了两个解决方案。
1. 我可以将插件作为NPM依赖项添加到其中一个核心项目中。然而,这种方法的缺点是,每次更改模块都需要推送到NPM,并且以这种方式开发插件模块并不方便。插件无法独立运行。
2. 我可以在一个核心项目的Gruntfile中列出插件列表。该列表将包含到模块的本地文件路径。在核心模块的构建中,将执行插件的构建。这将包括监视插件的构建文件的更改。这是一个不太干净的解决方案。
3. 我可以有另一个项目,其中包含对核心项目和所有插件的依赖关系,并将它们全部构建在一起。如何添加依赖关系仍然是个问题(情况1或2)。
你会怎样解决这个问题?
到目前为止,一切都很清楚。现在的目标是使每个核心项目都能添加插件模块。一个模块应该扩展任何一个项目的JavaScript。这意味着例如在一个前端中添加一个附加的angular模块到angular配置。我已经知道在核心应用程序中添加angular模块代码的位置和方法。
问题现在是:如何在多个项目之间创建合理的构建过程,同时还依赖于插件模块?我想出了两个解决方案。
1. 我可以将插件作为NPM依赖项添加到其中一个核心项目中。然而,这种方法的缺点是,每次更改模块都需要推送到NPM,并且以这种方式开发插件模块并不方便。插件无法独立运行。
2. 我可以在一个核心项目的Gruntfile中列出插件列表。该列表将包含到模块的本地文件路径。在核心模块的构建中,将执行插件的构建。这将包括监视插件的构建文件的更改。这是一个不太干净的解决方案。
3. 我可以有另一个项目,其中包含对核心项目和所有插件的依赖关系,并将它们全部构建在一起。如何添加依赖关系仍然是个问题(情况1或2)。
你会怎样解决这个问题?
"some-local-package": "file:./to/the/pkg/dir"
。这样你的本地更改就可以被包含进来了,但是对于生产/CI构建,你需要将这些更改发布到你正在使用的任何注册表中。 - Jhecht