Node.js用于构建/测试与部署的项目布局

时间:2012-04-19 17:51:58

标签: node.js deployment jslint npm cloudfoundry

我正在开发我的第一个Cloud Foundry项目(......和第一个Node.js项目,第一个MongoDB项目,第一个"表达"项目等等......)

第一天我发现了这个问题,并将答案作为组织我的github存储库的起点:

Folder structure for a Node.js project

有一个/node_modules目录未签入。而是由npm install基于package.json文件中的规范自动创建。好的,好的...我做了那个文件。

(注意:在vmc push期间,推送服务器似乎没有检查package.json文件。它似乎只是复制了node_modules目录,如果它没有做任何事情不存在...所以有必要在你的客户端上执行npm install然后推送。)

我已经在我的应用程序中运行了一些基础知识,现在我正处于开始放置测试和构建基础架构的阶段。例如:我喜欢一个构建过程,它会在我的所有JavaScript上运行linting。这是一个名为ready.js的持续集成库,看起来像是一个最新的构建工具...

但是在我的项目目录中做npm install ready.js会有些不对劲。这意味着当它不打算在云上运行时,会有更多内容进入/node_modules目录并上传到云端。出于同样的原因:如果我有一个构建过程来进行资源缩减(或者其他什么),那么我也不希望使用vmc push来部署源代码。

我知道这一切都是新的...但是有没有将目标转储到构建目录并从那里推送的约定?或者每个人都从有效的github根目录中推出,并且同时推动所有构建和测试?欢迎任何提示...使用方法,避免的方法......

更新:我找到了一个应用程序样板,用于使用express和Node.js(以及其他几个常用模块),它可以实现其构建过程"在服务器代码的javascript中......无论好坏:

https://github.com/mape/node-express-boilerplate

我也发现了这个,似乎结合了术语"样板"你希望看到结合到结构中的模块名称是一个很好的搜索策略,可以找到我想要的东西:

https://github.com/swbiggart/node-express-requirejs-backbone

1 个答案:

答案 0 :(得分:3)

npm允许您指定devDependencies,您可能希望看到this article

您可以在devDependencies下添加所有开发/测试环境依赖项,并在dependencies下添加所有与生产相关的模块。然后,您可以添加脚本以推送到云端。

我不熟悉Cloud Foundry或vmc push工作流程。但是,您可以将自定义脚本添加到 package.json 中的scripts对象,该对象将安装dev-environment模块,运行测试,清理npm缓存,然后安装仅生产模块和将您的代码和只有那些模块推送到云端。

修改

我不确定如果不推送到npm存储库就可以使用它们,但它们作为示例非常有用(我猜...)或者,您可以在shell脚本或节点中自动执行上述工作流程脚本。

<强> /修改

您可以挂钩任何可用的脚本...(有关详细信息,请参阅man npm-scripts):

   preinstall
          Run BEFORE the package is installed

   install, postinstall
          Run AFTER the package is installed.

   preuninstall, uninstall
          Run BEFORE the package is uninstalled.

   postuninstall
          Run AFTER the package is uninstalled.

   preupdate
          Run BEFORE the package is updated with the update command.

   update, postupdate
          Run AFTER the package is updated with the update command.

   prepublish
          Run BEFORE the package is published.

   publish, postpublish
          Run AFTER the package is published.

   pretest, test, posttest
          Run by the npm test command.

   prestop, stop, poststop
          Run by the npm stop command.

   prestart, start, poststart
          Run by the npm start command.

   prerestart, restart, postrestart
          Run by the npm restart command. Note: npm restart will  run  the
          stop and start scripts if no restart script is provided.

   Additionally,  arbitrary  scrips  can  be  run  by doing npm run-script
   <stage> <pkg>.

注意,此处publish用于将模块发布到npm。您应该将包设置为私有("private": true),这样您就不会意外地将代码发布到npm存储库。