首页 > 解决方案 > 了解节点包管理器以及应用程序如何启动/运行

问题描述

[显然是一个菜鸟问题] 从根本上说,我没有正确的 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投诉的意义何在?假设安装正确,包如何被调用以及在哪个路径下?

标签: node.jsnpm

解决方案


依赖问题是 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

推荐阅读