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

标签 node.js deployment jslint npm cloud-foundry

我正在处理我的第一个 Cloud Foundry 项目(......和第一个 Node.js 项目,第一个 MongoDB 项目,第一个“express”项目,等等......)

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

Folder structure for a Node.js project

/node_modules 目录未 checkin 。它是由 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

最佳答案

npm 允许你指定devDependencies,你可能想看看this article .

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

我不熟悉 Cloud Foundry 或 vmc push 工作流。但是,您可以将自定义脚本添加到 package.json 中的 scripts 对象,它会安装开发环境模块、运行测试、清理 npm 缓存,然后安装生产环境-仅模块并将您的代码推送到云中。

编辑

如果不推送到 npm 存储库,我不确定你是否可以使用这些,但它们作为示例很有用(我猜......)或者,你可以在 shell 脚本或 Node 中自动化我上面描述的工作流程脚本。

/编辑

您可以挂接到任何可用的脚本...(有关更多信息,请参阅 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) ("private": true),这样您就不会不小心将您的代码发布到 npm 存储库。

关于用于构建/测试与部署的 Node.js 项目布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10233869/

相关文章:

Node.js + Redis 内存泄漏。难道我做错了什么?

javascript - 等待回调nodejs

javascript - 检查全局变量是否存在的正确方法是什么?

javascript - 将 html 标签添加到 JSLint

javascript - JSLint 的 'Tolerate Stupidity'

javascript - 如何在 node.js 中实际使用 Q Promise?

javascript - 使用nodejs通过api在github中创建Issue并请求: response is undefined

java - Web Start 下载并保存为 .jar 格式?

docker - docker的UML部署图

java - iPhone、iPad 和 Windows Phone 应用程序部署为什么?