[显然是一个菜鸟问题]从根本上讲,我没有一个正确的npm思维模型,也不了解如何正确安装,运行和随后调用这些软件包。
我将用两个例子来说明。解决这些问题应该改善这种(缺乏的)心理模型。
例如,我在名为npm
的目录中安装了this package。首次安装时,安装程序会产生一些投诉。回顾安装过程仅返回一个我没有选择的错误: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' }
奇怪的是,安装了文件并从其目录启动了控制台...
第二个示例,使用this repository。我尝试通过下载并启动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
投诉有什么意义?假设安装正确,如何调用该软件包以及在哪个路径下调用该软件包?
答案 0 :(得分:0)
依赖性问题是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