我正在学习node.js并使用Visual Studio Code。在我的项目中,我安装了underscore.js。所以我的node_modules文件夹看起来像这样:
node_modules/
└── underscore
├── LICENSE
├── package.json
├── README.md
├── underscore.js
├── underscore-min.js
└── underscore-min.js.map
这是我的index.js文件:
const _ = require('underscore');
console.log(_.contains([1, 2, 3, 4], 2));
现在,当我按Ctrl +单击index.js中的contains
函数时,在Visual Studio Code中这意味着“转到定义”,它不会显示包含在node_modules/underscore.js
内部的函数。而是打开文件/home/user/.cache/typescript/2.9/node_modules/@types/underscore/index.d.ts
这是一个打字稿文件,不是javascript,我无法理解它来自哪里?我认为它不是从javascript文件自动生成的,因为js文件中不存在注释。执行npm install underscore
时,它是否已下载到我的计算机上?可以在js文件中而不是在VSCode中转到函数定义吗?
答案 0 :(得分:4)
d.ts文件来自以下存储库:https://github.com/DefinitelyTyped/DefinitelyTyped。它们以@ types / package-name发布,并且应作为devDependency安装在您正在使用的文件夹中。
也就是说,在您的项目目录中,您将先npm install --save underscore
,然后运行npm install --save-dev @types/underscore
来访问本来没有类型的包的类型定义。
它指向TypeScript缓存的原因与Node模块的解析有关。节点在树中查找每个node_modules文件夹,直到找到匹配项为止(更多信息:https://medium.freecodecamp.org/requiring-modules-in-node-js-everything-you-need-to-know-e7fbd119be8)。基本上,Node和TypeScript环顾四周,发现了@ types / underscore的缓存版本,只是指向那里,而不是项目中的本地安装版本。