node.js - 了解节点包管理器以及应用程序如何启动/运行
问题描述
[显然是一个菜鸟问题] 从根本上说,我没有正确的 npm 思维模型以及软件包如何正确安装、运行和随后调用。
我将用两个例子来说明。解决这些问题应该可以改善这种(缺乏的)心理模型。
例如,我将这个包安装在一个名为npm
. 在第一次安装时,安装程序有一些投诉。回顾安装过程只返回一个我没有选择的错误: ENOENT: no such file or directory, open '/Volumes/Mo/Users/main/r/npm/package.json'
我的理解是 npm 安装了一个目录node_modules
,在该目录中安装了被调用的包和大量依赖项。在包的目录中@mapbox/makizushi
是 package.json 文件。
如果我cd
在控制台中进入上述目录,则按照包的建议启动第一个命令:
node
> var makizushi = require('makizushi');
Thrown:
{ Error: Cannot find module 'makizushi'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
at Function.Module._load (internal/modules/cjs/loader.js:562:25)
at Module.require (internal/modules/cjs/loader.js:690:17)
at require (internal/modules/cjs/helpers.js:25:18) code: 'MODULE_NOT_FOUND' }
这很奇怪,因为文件已安装并且控制台是从其目录启动的......
第二个例子,使用这个存储库。我通过下载和启动npm install
以及完整的命令进行了尝试npm install @webgeodatavore/express-simplestyle-spec
首次安装时,会出现一些错误,例如:
> mapnik@3.7.2 install /Volumes/Mo/Users/dvodvo/r/npm/express-simplestyle-spec-master/node_modules/mapnik
> node-pre-gyp install --fallback-to-build
[...]
gyp ERR! cwd /Volumes/Mo/Users/main/r/npm/express-simplestyle-spec-master/node_modules/mapnik
gyp ERR! node -v v10.16.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok
[...]
npm WARN @webgeodatavore/express-simplestyle-spec@0.2.0 No repository field.
npm WARN @webgeodatavore/express-simplestyle-spec@0.2.0 No license field.
[...]
npm ERR! mapnik@3.7.2 install: `node-pre-gyp install --fallback-to-build`
npm ERR! Failed at the mapnik@3.7.2 install script.
我确实记得在第一种情况下(不久前)出现了这个错误。
那么如何从这种依赖问题中恢复过来呢?如果安装程序将安装定向到目录/usr/local/lib/node_modules/npm/node_modules/
,那么package.json
投诉的意义何在?假设安装正确,包如何被调用以及在哪个路径下?
解决方案
依赖问题是 npm 的一个缺点,依赖使事情变得有点臃肿。不幸的是,如果软件包没有正确发布,则无能为力。在不知道完整上下文的情况下,如果您运行会发生什么:
mkdir project
cd project/
npm init -y
npm install makizushi
该npm init -y
命令将package.json
在当前目录中为您创建文件。package.json 是 npm 在安装项目的所有依赖项时将读取的“清单”(以及部署脚本、版本控制和其他发布好东西等很酷的东西的来源)。然后npm install makizushi
将正确版本的包写入 package.json 文件,然后创建一个node_modules
文件夹。
将依赖项安装为项目特定依赖项的较旧方法是:
npm install --save makizushi
虽然最新版本的 npm 不需要这个,但 IMO 它有助于准确理解这个包的安装位置,而不是其他两个可以安装包的地方:全局和只是一个开发依赖项。
npm install -g makizushi
npm install --save-dev makizushi
推荐阅读
- python - Python列表中所有索引的总和
- python - 从 Youtube 抓取
- linux - 解压打包的 .so 库
- python - 如何查询 ManyToManyField 以从另一个模型中获取属性
- angular - 在 Angular 9 中将文件附加到 MS Graph 电子邮件的问题
- scrapy - 自定义项目管道中多个文件的 CsvItemExporter 不导出所有项目
- javascript - 如何在 vis 时间轴中调整周月断点
- calendar - iCal 在最近的工作日进行每月定期活动?
- excel - 从两个工作簿复制到两个工作表
- r - ifelse() 是否执行类型转换?