Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.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 如何安装不在package.json中的npm依赖项?_Javascript_Node.js_Npm_Npm Install - Fatal编程技术网

Javascript 如何安装不在package.json中的npm依赖项?

Javascript 如何安装不在package.json中的npm依赖项?,javascript,node.js,npm,npm-install,Javascript,Node.js,Npm,Npm Install,我对npm安装有问题。我想安装项目中使用的所有依赖项。在package.json中没有任何依赖项,但在我的项目文件中,例如const mongo=require'mongoose'和另一个文件const morgan=require'morgan'等 我知道当输入npm I-save时,它会更新我的package.json。但我希望安装所有依赖项,而不在任何地方显式键入它们的名称 是否有任何方法可以安装整个项目中使用的所有依赖项,但package.json中没有这些依赖项?不,您不能这样做-您必

我对npm安装有问题。我想安装项目中使用的所有依赖项。在package.json中没有任何依赖项,但在我的项目文件中,例如const mongo=require'mongoose'和另一个文件const morgan=require'morgan'等

我知道当输入npm I-save时,它会更新我的package.json。但我希望安装所有依赖项,而不在任何地方显式键入它们的名称


是否有任何方法可以安装整个项目中使用的所有依赖项,但package.json中没有这些依赖项?

不,您不能这样做-您必须通过显式安装来添加所有依赖项,如npm install morgan。NPM不知道您在文件中导入的依赖项。另一件事是,要求package.json中没有列出的依赖项是完全错误的,不应该发生。

简短回答:你不能


npm安装的工作原理是检查package.json中列出的所有依赖项,并一次性安装它们。因此,要么你从导师那里得到package.json,要么你一个接一个地安装它们,并不打算先编写程序代码,然后让NPM找到所有使用的依赖项。这是因为一个简单的原因:在使用外部库/包之前,您必须下载它,否则您几乎无法使用它

现在,我只看到您的用例的两个原因:

您复制并粘贴了一些外来代码,但没有所有文件,尤其是没有package.json,或者 您继承了以前的员工或团队的一些代码,这些代码没有文档记录,并且由不相关、不一致的文件组成。 无论如何,你的问题有几种解决方案:

令人讨厌的解决方案:运行npm start并查看您收到的错误消息。将找不到所有已卸载的依赖项,因此您将看到包名称,并可以手动将它们添加到package.json中。这将变得很糟糕,因为您每次都必须重新运行程序。为了避免这种情况,您可以看看哪些程序会自动重新启动

更好的解决方案是:打开您喜欢的web IDE,并使用全局搜索功能查找所有出现的字符串require,或作为Regex:require\.+\。这将列出程序文件中的所有依赖项导入。如果还应该有ECMA 6导入,也可以搜索import.+from.+-但是,您仍然需要手动将所有文件中的所有依赖项名称复制并粘贴到package.json文件中

最好但最复杂的解决方案是:从根项目目录开始编写Node.js脚本。创建一个依赖内存变量,如let dependencies=[]。读取所有*.js文件sync或async,每次匹配require或import语句时,检查依赖项是否已存在于依赖项数组中。如果没有,推它。最后,所有项目依赖项都将列在dependencies数组中,您可以将它们复制并粘贴到package.json中

Pseudo Node.js代码:

const lineReader=需要“line-reader”; 让依赖项=[]; const regex=/require\['|].+['|]\/g; lineReader.eachLine'/path/to/file',functionline{ const match=regex.execline; ifmatch{ ifdependencies.indexOfmatch[1]=-1{ 依赖项。pushmatch[1]; } } };
您可以扫描项目中所有必需的模块

假设您的项目仅使用common.js require,您可以通过执行以下操作获得所有模块的列表:

egrep -R --exclude-dir=node_modules '=\s*require\s*\(' | awk '{gsub(/^.+require\s*\(\s*./,""); gsub(/.\s*\).*$/,""); print $0}'
上述命令的更可读版本为:

#! /bin/bash
egrep -R --exclude-dir=node_modules '=\s*require\s*\(' |
    awk '{
        gsub(/^.+require\s*\(\s*./,"");
        gsub(/.\s*\).*$/,"");
        print $0
    }'
您可以将上面的脚本保存在文件中,并将其作为shell脚本执行

要自动安装模块,只需将其通过管道连接到xargs即可:


我将支持ES6模块作为作业留给读者。

使用命令npm I morgan-save。这将在package.json中安装依赖项并创建条目为什么它们不在package.json中?@jornsharpe我现在正在做turorial,我正在考虑这个问题。在本教程中,一步安装所有依赖项什么教程?关于如何做的说明是什么?检查
egrep -R --exclude-dir=node_modules '=\s*require\s*\(' |
    awk '{
        gsub(/^.+require\s*\(\s*./,"");
        gsub(/.\s*\).*$/,"");
        print $0
    }' |
    xargs npm install