为什么全局 npm 包不启动模块依赖?

Why does not the global npm package kick in for module dependency?

我已经在全球范围内安装了 typescript 和 ts-node。

我有一个如下所示的 package.json 文件,当我 运行 npm test 时,一切正常(注意:如你所愿看,ts-nodetypescript 在这种情况下作为本地模块安装)

{
  "name": "two_sum",
  "version": "1.0.0",
  "description": "two sum problem solver",
  "main": "main.js",
  "scripts": {
    "test": "./node_modules/.bin/mocha --compilers ts:ts-node/register ./test/*.spec.ts"
  },
  "devDependencies": {
    "chai": "^4.1.2",
    "mocha": "^4.1.0",
    "ts-node": "^4.1.0",
    "typescript": "^2.6.2"
  }
}

但是,如果我从 package.json 中取出两个模块(并从我的 ./mode_modules 中删除这两个包),即 ts-nodetypescript 没有在本地安装,我得到这样的错误:

Error: Cannot find module 'typescript'
    at Function.Module._resolveFilename (module.js:470:15)
    ....
    at Module._compile (module.js:571:32)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
    at Module.runMain (module.js:605:10)
    at run (bootstrap_node.js:427:7)
    at startup (bootstrap_node.js:151:9)
    at bootstrap_node.js:542:3
npm ERR! Test failed.  See above for more details.

这是我的问题:为什么我需要在本地安装这两个软件包?为什么全局包不能启动​​来解决依赖?

当您的代码运行时,全局安装的包不参与解析。

这是因为该项目(由您的 package.json 表示)不知道全局安装了什么。

全局安装的包与环境相关,与项目无关。

如果在解决方案中使用全局安装的包,则该项目可能在您的环境中运行,但在其他环境中不运行。

这样会使你的项目的可执行性不可靠(或者说,耦合或依赖于你的环境)。

如今,仅为 CLI 工具安装全局包。