Chr*_*son 30 javascript module node.js npm
我为每个网络应用程序使用Node.js(通过browserify),所有这些应用程序都有一些共同的依赖关系,其他依赖关系.这些应用程序中的每一个都有一个package.json文件,用于指定所需模块的版本.
现在,我/node_modules在我的应用程序的父文件夹中有一个目录,用于他们都需要引用的模块,然后我将特定于应用程序的模块node_modules放在该应用程序目录中的一个文件夹中.这在短期内工作正常,因为我的require()语句能够在文件结构中向上查找,直到找到node_modules包含正确app 的目录.
这很棘手的是当我想回到一个旧项目并运行npm install以确保它仍然可以找到它所需的所有依赖项时.(谁知道从那时起在父目录级别发生了什么搞笑业务.)我的印象就是npm install:
package.json中,首先检查它是否存在,移动以同样的方式的目录require做.如果不是,请将其安装到本地node_modules目录(如有必要,创建该目录).npm install但是,当我在app文件夹中运行时,它似乎在本地安装所有内容,而不管上游可能存在的其他位置.这是正确的行为吗?(这可能是另一个原因,比如我的坏版本语言package.json).如果这是正确的行为,有没有办法让我npm install表现得像上面那样?
在每个应用程序中广泛复制模块并不是什么大问题,但它感觉很乱,并且阻止我对常见模块进行小的改进而不必更新每个旧package.json文件.当然,这可能是一件好事......
Pet*_*ons 23
但是,当我在app文件夹中运行npm install时,它似乎在本地安装所有内容,无论它在上游可能存在的其他位置.这是正确的行为吗?(这可能是另一个原因,比如我的package.json中的坏版本语言).如果这是正确的行为,有没有办法让我的npm安装行为如上所述?
是的,这就是npm安装所做的.在node.js代码中,require算法具有它所看到的特定位置序列,包括向上走的文件系统.但是,npm install不这样做.它只是安装到位.它使用的算法都只限于node_modules当前目录下的一个目录,并且它不会触及上面的任何内容(除了with -g).
在每个应用程序中广泛复制模块并不是什么大不了的事情,但是它感觉很乱并且阻止我对常见模块进行小的改进而不必更新每个旧的package.json文件.当然,这可能是一件好事......
是的,基本上你做错了.常规工作流程可以很好地扩展到Internet.对于您的用例,它会创建一些额外的繁琐工作,但您也可以按预期使用语义版本控制,并"mylib": "^1.0.0"在您的package.json中为您的应用指定,并且可以在下次自动获取更新版本时使用npm install.