运行 节点内的 Grunt。js/Express 应用程序

Running Grunt within a Node.js/Express application

我有一个 Node.js/Express.js 应用程序,它的结构是使用

开箱即用的
$ express myApp -c less --hogan

所以,大致是这样的:

myApp
└─ /bin
└─ /node_modules
└─ /public
└─ /routes
└─ /views
└─ app.js
└─ package.json

现在的工作原理是 /views/ 中有 .hjs (Hogan) 文件,这些文件显然从未编译过,但直接由渲染引擎使用。

但是,在 /public/ 中,.less 文件默认被编译成缩小的 .css 文件。我不完全确定应用程序的哪一部分执行此操作,但它确实有效。

说我想把这个应用程序发展成更大的东西,在 /public/ 中使用更多的 .less 文件和更多的 .js 文件,然后自动检查、连接和缩小它们(使用类似 Grunt 的东西)。

在整个工作流程/应用程序中,我应该将 Grunt 智能地放置在哪里?根中的 Gruntfile.js 然后在 /public/ 中设置为 watch/public/ 中的 Gruntfile.js? express/node.js 的一些内部部分(例如,已经在进行较少编译的部分)?完全是别的东西?这里的最佳做法是什么?

提前致谢。

通常人们将 Gruntfile 放在项目根目录中,但根据项目的设置方式,这可能并不总是最佳位置。我可能误解了你的意思,但我通常不会将 less 文件存储在 public 中。我会将 public 更像是一个 "target" 目录,其中只有 transpiled/concatenated/minified 文件。

我要么将 UI 拆分到它自己的项目中,要么至少拆分到它自己的 "src" 或 "fed-src"(front-end dev-src) 文件夹中,该文件夹有自己的 Gruntfile . Gruntfiles 已经很难阅读了,如果你把前端和后端的所有任务都放在同一个文件中,那真的很难理解。

一旦你的关注点被分离,你就可以让每个 Gruntfile 只监视它关心的 src 文件夹。当然,您将不得不使用两个 grunt watch 进程(1 个用于 UI,1 个用于服务器)但是每个人都应该更容易维护。

我喜欢单独项目方法的另一个原因是因为在应用程序上线后,很多时候您只需要对 UI 或服务器进行一些更改,所以它只需要必须部署您更改的内容。不利的一面是,如果一个依赖于另一个,它可能会使协调部署变得复杂,但只要您不进行重大更改,您就可以开始了。