我是 Node 新手,但到目前为止我很享受。我试图将我的 node_modules
(库)目录移到公共(public)“webroot”之外,需要建议和指导。
我已经设置了我的简单 expressJS基于Node的项目如下:
/my_project
/config
/public
/node_modules
server.js
我想知道是否有任何方法可以将 /node_modules
目录放在我的 webroot 之外而不破坏我的应用程序。我只是习惯于在我公开暴露的 webroot 中保持最低限度,并且对那里的库感觉不正确。称我为老式的,但这就是我习惯在 PHP 和 C# 世界中做事的方式。
如果我按如下方式设置项目:
/my_project
/config
/node_modules
/public
server.js
然后一切都变得不稳定,Node 的 require()
魔法中断了。
我尝试了以下方法:
var express=require('../express');
这也不起作用,给我“找不到模块”类型错误。
- 我要问的是否可能,如果可以,那怎么办?
- 将我的库放在 webroot 中是否存在任何重大风险,或者我错过了 Node 工作方式的一些基本内容。
你们是做什么的,生产应用程序的最佳实践是什么?我可以举一些关于你们的生产实践的例子以及为什么。
最佳答案
1.是否可以在项目外部的文件夹中包含模块
是的。
<强>2。在 webroot 中包含模块是否存在重大风险?
假设您所说的“webroot”是指服务器的根目录或项目之外的任何文件夹:是的。可以使用 g-flag 使用 npm 全局安装模块:npm install -g express
。这通常被认为是不好的做法,因为不同的项目可能依赖于同一模块的不同版本。本地安装允许不同的项目有不同的版本。
如果您使用版本控制并且不想 checkin 外部模块,一个常见的(和 npm 中的标准)模式是忽略 ./node_modules
并在 package.json 中指定依赖项文件。
3. “生产应用的最佳做法是什么?”
不太适合 SO,但既然我在做,我还是会试一试。如果你使用 grunt(一个非常流行的任务自动化工具),你通常会得到这样的结构:
/my_project
/node_modules
/lib
# actual project files
/public
# files that are meant to be sent to clients
/test
package.json # specifies dependencies, main script, version etc
README.md # optional
这种结构的优点是可以清楚地分离核心文件、依赖项和任何测试,同时将它们全部保存在同一个文件夹中。
关于node.js - 我可以将 npm node_modules 目录放在我的 'webroot' 之外吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15521655/