2013-03-20 125 views
7

我是Node的新手,但到目前为止我都很享受。我试图将我的node_modules(库)目录移到公共“webroot”之外,需要建议和指导。我可以把npm node_modules目录放在我的'webroot'之外

我设置我的简单expressJS基于节点项目如下:

/my_project 
    /config 
    /public   
    /node_modules 
    server.js 

我想知道是否有什么办法,我可以有/node_modules DIR我的根目录之外,并没有打破我的应用程序。我只是习惯于将公开暴露的webroot保留在最低限度,并且对那些库中的内容感到不适应。打电话给我老式的,但这就是我习惯于在PHP和C#世界做东西。

如果我设置的项目如下:

/my_project 
    /config 
    /node_modules 
    /public   
    server.js 

那么这一切都摇晃和节点的require()魔符。

我已经试过如下:

var express=require('../express');不工作,要么给我“无​​法找到模块”类型的错误。

  1. 就是我问的,甚至可能,如果是的话,那么如何?
  2. 有没有任何主要的风险,我有我的库在一个webroot或者我错过了一些基本的方式与节点的工作方式。
  3. 你们做什么,生产应用程序的最佳做法是什么? 我可以举一些你的生产实践和原因的例子。
+0

'var express = require('../ node_modules/express');'似乎没有用。它确实看起来有点笨重。我仍然非常感兴趣你最擅长的是什么。 – 2013-03-20 11:07:15

+2

要求('express')应该仍然有效。见[这个方便的帖子](http://www.bennadel.com/blog/2169-Where-Does-Node-js-And-Require-Look-For-Modules-.htm)。尤其是这一部分:“如果给定模块不是核心模块,Node.js将开始搜索名为'node_modules'的目录,它将从当前目录开始(相对于Node中正在执行的Javascript文件),然后按照文件夹层次结构工作,检查每个级别的node_modules文件夹。“所以看来你的问题在别的地方。 – 2013-03-20 11:10:08

+2

另一方面,在节点中通常会将客户端可以访问的文件放在/ public中。 server.js应该不是。 – 2013-03-20 11:11:04

回答

4

1.是否有可能有模块文件夹中的项目

是外面。

2.在webroot中有模块会有什么主要风险吗?

假设你的“webroot”是指服务器的根目录或你的项目之外的任何文件夹:是的。可以使用g-flag:npm install -g express以npm全局安装模块。这通常被认为是不好的做法,因为不同的项目可能取决于同一模块的不同版本。本地安装允许不同的项目具有不同的版本。

如果您使用的是版本控制并且不想检入外部模块,那么通用(和标准的npm)模式将忽略./node_modules并指定package.json文件中的依赖关系。

3.“生产应用程序的最佳做法是什么?”

不适合所以,但是因为我在这,所以无论如何我都会给它一个镜头。如果您使用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 

这种结构具有明确区分核心文件,依赖任何测试的优势,同时保持它的所有在同一个文件夹中。

+0

谢谢安德烈亚斯,我会咕a一声。 – 2013-03-20 13:09:47

+1

几点考虑。如果将模块与单个项目一起存储,则文件路径最终可能会破坏Windows上的255个字符限制。这是我将它们存储在更高目录级别的主要原因,请参阅:http://stackoverflow.com/questions/13318364/how-to-deploy-node-js-application-with-deep-node-modules-structure -on窗口。此外,还有一些缺陷是不检查你的模块,'imagemin'的更新曾经打破了我的构建过程。 http://stackoverflow.com/questions/11459475/should-i-check-in-node-modules-to-git-when-creating-a-node-js-app-on-heroku – 2014-04-08 09:09:11

+1

@AdamMarshall是的,我想用'npm shrinkwrap'是一个很好的做法,同时不检查node_modules – 2014-04-08 10:03:03

相关问题