Javascript npm安装的工作原理
我对我的每个web应用程序都使用Node.js(via),所有这些应用程序都有一些共同的依赖项,还有一些特定于它们自己。每个应用程序都有一个Javascript npm安装的工作原理,javascript,node.js,module,npm,Javascript,Node.js,Module,Npm,我对我的每个web应用程序都使用Node.js(via),所有这些应用程序都有一些共同的依赖项,还有一些特定于它们自己。每个应用程序都有一个package.json文件,指定它需要哪些模块的版本 现在,我在我的应用程序的父文件夹中有一个/node\u modules目录,用于它们都需要引用的模块,然后我将特定于应用程序的模块放在该应用程序目录中的node\u modules文件夹中。这在短期内效果很好,因为我的require()语句能够一直向上查看文件结构,直到找到包含正确应用程序的node\u
package.json
文件,指定它需要哪些模块的版本
现在,我在我的应用程序的父文件夹中有一个/node\u modules
目录,用于它们都需要引用的模块,然后我将特定于应用程序的模块放在该应用程序目录中的node\u modules
文件夹中。这在短期内效果很好,因为我的require()
语句能够一直向上查看文件结构,直到找到包含正确应用程序的node\u modules
目录
当我想回到一个旧项目并运行npm install
以确保它仍然能够找到所需的所有依赖项时,这就变得棘手了。(谁知道从那时起在父目录级别发生了什么有趣的事情。)我的印象是npm install
这样做:
- 对于
中列出的每个模块,首先检查它是否存在,以与package.json
相同的方式向上移动目录。如果不是,请将其安装到本地require
目录(必要时创建该目录)节点\u modules
npm install
时,它似乎会在本地安装所有内容,而不管它可能存在于上游的其他位置。这是正确的行为吗?(可能还有另一个原因,比如我的package.json
中的版本语言不好)。如果这是正确的行为,我有没有办法让npm安装
像上面那样操作
在每个应用程序中广泛复制模块并不是什么大不了的事,但这让我感觉很混乱,无法对普通模块进行小的改进,也不必更新所有旧的package.json
文件。当然,这可能是件好事
然而,当我在应用程序文件夹中运行npm install时,它似乎会在本地安装所有内容,而不管它可能存在于上游的其他位置。这是正确的行为吗?(可能还有另一个原因,比如我的package.json中的糟糕版本语言)。如果这是正确的行为,我有没有办法让npm安装像上面那样运行
是的,npm安装就是这样做的。在node.js代码中,require
算法有一个特定的位置序列,包括遍历文件系统。但是,npm安装
不会这样做。它只是安装到位。它使用的算法都被限制在当前目录下的一个节点\u modules
目录中,并且它不会触及该目录之上的任何内容(除了-g
)
在每个应用程序中广泛复制模块并不是什么大不了的事,但这让我感觉很混乱,无法对普通模块进行小的改进,也不必更新每个旧的package.json文件。当然,这可能是件好事
是的,基本上你做错了。常规工作流可以很好地扩展到Internet。对于您的用例,它会产生一些额外的繁琐工作,但您也可以按照预期使用语义版本控制,并在您的package.json中为您的应用指定
“mylib”:“^1.0.0”
,并在下次安装npm
”时自动获取更新版本。这是链接。请点击此链接。这可能对你有帮助。我觉得更多关于^1.0.0做什么的信息对于在npm上搜索帮助时遇到这个问题的人来说是非常好的。正如@AlejoBrz所说,如果有人想要更多关于版本控制的信息,请访问我是python开发人员,我相信它的打包依赖项就像virtualenv一样是独立的。