有一个在mac下开发的项目,安装了npmi包,一切正常;把这个项目放到linux机器上,安装npmi包,报了一堆警告:npmWARNoptionalSKIPPINGOPTIONALDEPENDENCY:fsevents@^1.2.7(node_modules/chokidar/node_modules/fsevents):npmWARNnotsupSKIPPINGOPTIONAL依赖项:fsevents@1.2.7不受支持的平台:需要{"os":"darwin","arch":"any"}(当前:{"os":"linux","arch":"x64"})npmWARN0403@1.0.0无描述npmWARN0403@1.0.0无存储库字段.npmWARN可选跳过可选依赖项:abbrev@1.1.1(node_modules/fsevents/node_modules/abbrev):npmWARNenoent跳过可选依赖项:ENOENT:没有这样的文件或目录,重命名'/root/2019/0403/node_modules/fsevents/node_modules/abbrev'->'/root/2019/0403/node_modules/fsevents/node_modules/.abbrev.DELETE'npmWARNoptionalSKIPPINGOPTIONAL依赖项:ansi-regex@2.1.1(node_modules/fsevents/node_modules/ansi-regex):npmWARNenoent跳过可选依赖项:ENOENT:没有这样的文件或目录,重命名'/root/2019/0403/node_modules/fsevents/node_modules/ansi-regex'->'/root/2019/0403/node_modules/fsevents/node_modules/.ansi-regex.DELETE'npmWARN可选跳过可选依赖项:aproba@1.2.0(node_modules/fsevents/node_modules/aproba):npmWARNenoent跳过可选依赖项:ENOENT:没有这样的文件或目录,重命名'/root/2019/0403/node_modules/fsevents/node_modules/aproba'->'/root/2019/0403/node_modules/fsevents/node_modules/.aproba.DELETE'npmWARNoptionalSKIPPINGOPTIONALDEPENDENCY:balanced-match@1.0.0(node_modules/fsevents/node_modules/balanced-match):npmWARNenoentSKIPPINGOPTIONALDEPENDENCY:ENOENT:没有这样的文件或目录,重命名'/root/2019/0403/node_modules/fsevents/node_modules/balanced-match'->'/root/2019/0403/node_modules/fsevents/node_modules/.balanced-match.DELETE'npmWARNoptionalSKIPPINGOPTIONALDEPENDENCY:chownr@1.1.1(node_modules/fsevents/node_modules/chownr):npmWARNenoentSKIPPING可选依赖项:ENOENT:没有这样的文件或目录,重命名'/root/2019/0403/node_modules/fsevents/node_modules/chownr'->'/root/2019/0403/node_modules/fsevents/node_modules/.chownr.DELETE'npmWARNoptionalSKIPPINGOPTIONALDEPENDENCY:code-point-at@1.1.0(node_modules/fsevents/node_modules/code-point-at):npmWARNenoentSKIPPINGOPTIONALDEPENDENCY:ENOENT:nosuchfileordirectory,重命名'/root/2019/0403/node_modules/fsevents/node_modules/code-point-at'->'/root/2019/0403/node_modules/fsevents/node_modules/.code-point-at.DELETE'...执行npmls,有不少UNMETOPTIONALDEPENDENCY的模块,最后还报了一堆错误:│├──define-property@2.0.2deduped│├──extend-shallow@3.0.2deduped│├──regex-not@1.0.2deduped│└─┬safe-regex@1.1.0│└─ret@0.1.15├─┬未满足的可选依赖fsevents@1.2.7│├──nan@2.13.2│└─┬未满足的可选依赖节点-pre-gyp@0.10.3│├──未满足的可选依赖项detect-libc@1.0.3│├──┬未满足的依赖项mkdirp@0.5.1││└──未满足的依赖minimist@0.0.8│├──┬未满足的可选依赖needle@2.2.4││├──┬未满足的可选依赖debug@2.6.9│││└──未满足的可选依赖ms@2.0.0││├─┬未满足的可选依赖iconv-lite@0.4.24│││└──未满足的可选依赖safer-buffer@2.1.2││└──未满足的可选依赖sax@1.2.4│├─┬未满足的可选依赖nopt@4.0.1││├──未满足的可选依赖项abbrev@1.1.1││└──┬未满足的可选依赖项osenv@0.1.5││├──未满足的可选依赖项os-homedir@1.0.2│││┬─未满足的可选依赖项os-tmpdir@1.0.2│├─┬未满足的可选依赖项npm-packlist@1.2.0││├─┬未满足的可选依赖项ignore-walk@3.0.1│││└─┬未满足的依赖项@ENCY3.0.4│││└─┬未满足的依赖brace-expansion@1.1.11│││├──未满足的依赖balanced-match@1.0.0│││└──未满足的依赖concat-map@0.0.1││└──未满足的可选依赖npm-bundled@1.0.5│├──┬未满足的可选依赖ENCYnpmlog@4.1.2││├─┬未满足的可选依赖关系是-我们-那里-yet@1.1.5│││├──未满足的可选依赖关系委托@1.0.0│││└─┬未满足的可选依赖关系可读-stream@2.3.6││├──未满足的可选依赖项core-util-is@1.0.2│││├──未满足的依赖项inherits@2.0.3│││├──未满足的可选依赖项isarray@1.0.0│││├──未满足的可选依赖项process-nextick-args@2.0.0│││├──未满足的依赖项safe-buffer@5.1.2││├─┬未满足的可选依赖项string_decoder@1.1.1││└──未满足的依赖项safe-buffer@5.1.2│││└──未满足的可选依赖项util-deprecate@1.0.2││├──未满足的依赖项console-control-strings@1.1.0││├─┬未满足的可选依赖项gauge@2.7.4││├──未满足的可选依赖项aproba@1.2.0│││├──未满足的依赖项console-control-strings@1.1.0││├──未满足的可选依赖项有-unicode@2.0.1│││├──未满足的可选依赖对象分配@4.1.1│││├──未满足的可选依赖信号退出@3.0.2││├─┬未满足的依赖字符串宽度@1.0.2││││├──未满足的依赖代码点@1.1.0││││├─┬未满足的依赖is-fullwidth-code-point@1.0.0│││││└──未满足的依赖number-is-nan@1.0.1││││└──未满足的依赖strip-ansi@3.0.1││├─┬未满足的依赖关系strip-ansi@3.0.1││││└──未满足的依赖关系ansi-regex@2.1.1│││└─┬未满足的可选依赖关系wide-align@1.1.3││││──未满足的依赖string-width@1.0.2││└──未满足的可选依赖set-blocking@2.0.0│├──┬未满足的可选依赖rc@1.2.8││├──未满足的可选依赖deep-extend@0.6.0│├──未满足的可选依赖ini@1.3.5││├──未满足的可选依赖minimist@1.2.0││└──未满足的可选依赖strip-json-comments@2.0.1│├─┬未满足的可选依赖关系rimraf@2.6.3││└─┬未满足的可选依赖关系glob@7.1.3││├──未满足的可选依赖关系fs.realpath@1.0.0││├─┬未满足的可选依赖项inflight@1.0.6││├──未满足的依赖项once@1.4.0│││└──未满足的依赖项wrappy@1.0.2││├──未满足的依赖项inherits@2.0.3│││─未满足的依赖minimatch@3.0.4││├─┬未满足的依赖once@1.4.0│││└──未满足的依赖wrappy@1.0.2││└──未满足的可选依赖path-is-absolute@1.0.1│├──未满足的可选依赖项semver@5.6.0│└──┬未满足的可选依赖项tar@4.4.8│├──未满足的可选依赖项chownr@1.1.1│├──┬未满足的可选依赖项fs-minipass@1.2.5││└──未满足的依赖minipass@2.3.5│├──┬未满足的依赖minipass@2.3.5││├──未满足的依赖safe-buffer@5.1.2││└──未满足的依赖yallist@3.0.3│├─┬未满足的可选依赖minizlib@1.2.1││└──未满足的依赖minipass@2.3.5│├──未满足的依赖mkdirp@0.5.1│├──未满足的依赖safe-buffer@5.1.2│└──未满足的依赖yallist@3.0.3├─┬glob-parent@3.1.0│├─┬is-glob@3.1.0││└──is-extglob@2.1.1deduped│└──path-dirname@1.0.2├──inherits@2.0.3├─┬is-binary-path@1.0.1│└──binary-extensions@1.13.1├──┬is-glob@4.0.1│└──is-extglob@2.1.1├──normalize-path@3.0.0├──path-is-absolute@1.0.1├─┬readdirp@2.2.1│├──graceful-fs@4.1.15│├──micromatch@3.1.10deduped│└─┬readable-stream@2.3.6│├──core-util-is@1.0.2│├──inherits@2.0.3deduped│├──isarray@1.0.0│├──process-nextick-args@2.0.0│├──safe-buffer@5.1.2│├─┬string_decoder@1.1.1││└──safe-buffer@5.1.2deduped│└──util-deprecate@1.0.2└──upath@1.1.2npm错误!缺少:mkdirp@0.5.1,node-pre-gyp@0.10.3npm需要ERR!缺少:minimist@0.0.8,mkdirp@0.5.1npm需要ERR!缺少:minimatch@3.0.4,ignore-walk@3.0.1npmERR要求!缺少:brace-expansion@1.1.11,minimatch@3.0.4npm所需ERR!缺少:balanced-match@1.0.0,brace-expansion@1.1.11npm需要ERR!缺少:concat-map@0.0.1,大括号扩展需要n@1.1.11npm错误!缺少:console-control-strings@1.1.0,npmlog@4.1.2npmERR需要!缺失:inherits@2.0.3,readable-stream@2.3.6npmERR要求!缺少:safe-buffer@5.1.2,readable-stream@2.3.6npmERR需要!缺少:safe-buffer@5.1.2,string_decoder@1.1.1npmERR需要!缺少:console-control-strings@1.1.0,gauge@2.7.4npmERR要求!缺少:string-width@1.0.2,gauge@2.7.4npmERR要求!缺少:strip-ansi@3.0.1,gauge@2.7.4npmERR要求!缺少:code-point-at@1.1.0,string-width@1.0.2npmERR要求!缺少:is-fullwidth-code-point@1.0.0,string-width@1.0.2npmERR要求!缺少:strip-ansi@3.0.1,string-width@1.0.2npmERR需要!缺少:number-is-nan@1.0.1,is-fullwidth-code-point@1.0.0npmERR要求!缺少:ansi-regex@2.1.1,strip-ansi@3.0.1npmERR需要!缺少:string-width@1.0.2,wide-align@1.1.3npmERR要求!缺失:inherits@2.0.3,glob@7.1.3n需要下午错误!缺少:minimatch@3.0.4,glob@7.1.3npmERR要求!缺少:once@1.4.0,glob@7.1.3npm需要ERR!缺失:once@1.4.0,inflight@1.0.6npmERR要求!缺少:wrappy@1.0.2,inflight@1.0.6npm需要ERR!缺少:wrappy@1.0.2,once@1.4.0npmERR需要!缺少:minipass@2.3.5,tar@4.4.8npmERR需要!缺少:mkdirp@0.5.1,tar@4.4.8npm需要ERR!缺少:safe-buffer@5.1.2,tar@4.4.8npm需要错误!缺少:yallist@3.0.3,tar@4.4.8npm需要,错误!缺少:minipass@2.3.5,fs-minipass@1.2.5npm需要,错误!缺少:safe-buffer@5.1.2,minipass@2.3.5npmERR需要!缺少:yallist@3.0.3,minipass@2.3.5npm需要,错误!missing:minipass@2.3.5,minizlib@1.2.1需要的仔细观察发现UNMETOPTIONALDEPENDENCY和npmERR的模块是同一批模块,也是安装时warn的那个仔细观察模块,发现这些都是fsevents依赖的模块。fsevents只能在macOS下安装,不能在linux系统下安装。linux下会跳过fsevents模块,不会安装fsevents依赖的模块。这实际上是npm中的一个错误。npmi报告Warn,npmls报告Err。这是不一致的,容易引起误解。目前无论使用哪个版本的npm都会出现这个问题,npmi--no-optional无法解决这个问题。这些错误不影响项目的正常运行,因为linux不需要fsevents。如果不想看到npmErr,可以使用npmi-f强制安装。安装过程中没有警告。安装完成后使用npmls查看:└─┬chokidar@2.1.5└──fsevents@1.2.7是干净的,没有任何错误。我的项目是chokidar,依赖fsevents,chokidar依赖browser-sync、webpack等。
