自从看了es6的模块引入之后,对npm一直有个小问题。
比如在npm install vue --save
之后,为什么在页面内引入vue只需要var Vue = require('vue');
而不是var Vue = require('./node_modules/vue/vue');
自从看了es6的模块引入之后,对npm一直有个小问题。
比如在npm install vue --save
之后,为什么在页面内引入vue只需要var Vue = require('vue');
而不是var Vue = require('./node_modules/vue/vue');
你有没有发现import
也是这样 import Vue from 'vue'
他们的规则是一样的 当直接require
一个模块名的时候,会向上找到node_modules
文件夹,直到找到一个,在此文件夹中寻找依赖,这是nodejs
里面自己的hook
5 回答4.8k 阅读✓ 已解决
4 回答2.4k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
5 回答1.9k 阅读
2 回答1.3k 阅读✓ 已解决
3 回答2k 阅读
1 回答3.2k 阅读
Node引入模块一般需要经历3个步骤:
路径分析
、扩展名分析
、编译执行
。Node查找模块的先后顺序:
缓存模块 > 核心模块 > 路径形式文件模块 > 自定义文件模块
。缓存模块
:Node引入过的模块都会被缓存下来。无论是核心模块还是文件模块,require对相同模块的第二次加载一律采用缓存优先的方式,其中核心模块
的缓存检查优先于文件模块
的缓存检查。核心模块:
Node提供的模块,已经是编译后二进制文件。路径形式文件模块:
以.、..和./开头的模块。自定义文件模块:
第三方npm包,查找此类模块最耗时且最慢,查找先后顺序:当前目录下node_modules目录
、父目录下node_modules目录
、向上逐级递归直到根目录下下node_modules目录
,因为node_modules文件目录一般都比较深入,所以最耗时最慢。希望对您有所帮助!
参考资料:
深入浅出NodeJS