我正在开发我的第一个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
答案 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存储库。