Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript npm安装的工作原理_Javascript_Node.js_Module_Npm - Fatal编程技术网

Javascript npm安装的工作原理

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

我对我的每个web应用程序都使用Node.js(via),所有这些应用程序都有一些共同的依赖项,还有一些特定于它们自己。每个应用程序都有一个
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一样是独立的。