关于npm的小问题

自从看了es6的模块引入之后,对npm一直有个小问题。
比如在npm install vue --save之后,为什么在页面内引入vue只需要var Vue = require('vue'); 而不是var Vue = require('./node_modules/vue/vue');

阅读 3.1k
4 个回答

Node引入模块一般需要经历3个步骤:路径分析扩展名分析编译执行

Node查找模块的先后顺序:缓存模块 > 核心模块 > 路径形式文件模块 > 自定义文件模块

缓存模块:Node引入过的模块都会被缓存下来。无论是核心模块还是文件模块,require对相同模块的第二次加载一律采用缓存优先的方式,其中核心模块的缓存检查优先于文件模块的缓存检查。

核心模块:Node提供的模块,已经是编译后二进制文件。

路径形式文件模块:以.、..和./开头的模块。

自定义文件模块:第三方npm包,查找此类模块最耗时且最慢,查找先后顺序:当前目录下node_modules目录父目录下node_modules目录向上逐级递归直到根目录下下node_modules目录,因为node_modules文件目录一般都比较深入,所以最耗时最慢。

希望对您有所帮助!

参考资料:深入浅出NodeJS

你有没有发现import也是这样 import Vue from 'vue'
他们的规则是一样的 当直接require一个模块名的时候,会向上找到node_modules文件夹,直到找到一个,在此文件夹中寻找依赖,这是nodejs里面自己的hook

node的require函数加载模块是有一定规则的,
直接看阮一峰大大的这篇文章require() 解读

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题