2019-10-27node.js中模块的加载机制

1.1模块查找规则-当模块拥有路径但没有后缀时

require('./find.js');

1.require方法根据模块路径查找模块,如果是完整路径,直接引入模块。

require('./find');

2.模块的后缀省略掉,先找同名js文件,再找同名js文件夹

3.如果找到了同名文件夹,找文件夹中的index.js

4.如果文件夹中没有index.js,就会去当前文件夹(find文件夹)下的package.js文件中查找main选项中的入口文件

5.如果指定的入口文件不存在或者没有指定入口文件就会报错,模块没有被找到

验证①:require('./find.js');

新建文件夹modulefindRules,在其下新建文件require.js和find.js

在find.js中写入

console.log(' modulefindRules 文件夹下的find.js被引用了');

在require.js中写入

require('./find.js');

命令行工具:PS C:\Node\modulefindRules> node require.js

输出:modulefindRules 文件夹下的find.js被引用了

验证②:require('./find.js');

在require.js中写入

require('./find');

命令行工具:PS C:\Node\modulefindRules> node require.js

输出:modulefindRules 文件夹下的find.js被引用了

验证③:将find.js.bak改名

命令行工具:PS C:\Node\modulefindRules> node require.js

输出:找不到FOUND文件

验证④:新建find文件夹,新建index.js文件

文件夹modulefindRules,在其下新建文件夹find,在其下新建文件index.js

在index.js中写入

console.log(' find文件夹下的index.js被执行了');

命令行工具:PS C:\Node\modulefindRules> node require.js

输出:find文件夹下的index.js被执行了

验证⑤:文件index.js改名index.js.bak

命令行工具:PS C:\Node\modulefindRules> cd find   //切换到find目录

命令行工具:PS C:\Node\modulefindRules\find>npm init   // 建立package.json文件 

修改package.jsom文件中的main的指向main.js

在find文件夹下新建main.js文件

console.log(' find文件夹下的main.js被执行了');

输出:find文件夹下的main.js被执行了

为什么会执行?先找find文件夹下找index.js没有找到,去package.jsom文件中找main选项,main指定的是哪个文件,就执行哪个文件。

验证⑥:如果package.json中没有main选项

输出:找不到FOUND文件

================================================

1.2模块查找规则-当模块没有路径且没有后缀时

require('find');

1.node.js会假设他是系统模块

2.node.js会去node_modules文件夹中

3.首先看是否有该名字的文件

4.再看是否有该名字的文件夹

5.如果是文件夹看里面是否有index.js

6.如果没有index.js查看改文件夹中的package.json的main选项确定模块入口文件

7.否则找不到报错

验证①:

在require.js文件中写入

require('find');

在modulefindRules文件夹下新建node_modules文件夹,并新建find.js文件

在find.js文件中写入

console.log('node_modules中的find.js被执行了')

命令行工具:PS C:\Node\modulefindRules> node require.js

输出:node_modules中的find.js被执行了

验证②:修改find.js为find.js.bak

node_modules文件夹下新建find文件夹,在其下新建index.js

index.js写入

console.log('  node_modules 文件夹中find文件夹下的index.js被执行了');

命令行工具:PS C:\Node\modulefindRules> node require.js

输出: node_modules 文件夹中find文件夹下的index.js被执行了

验证③:没有index.js文件,找package.json

index.js修改为index.js.bak

命令行工具:PS C:\Node\modulefindRules\node_modules\find>npm init -y

生产package.json文件

在 package.json文件中,main指向改为b.js

在find文件夹下新建b.js文件

在b.js文件写入

console.log('b.js文件被执行了');

命令行工具:PS C:\Node\modulefindRules>require.js

输出:b.js文件被执行了

验证④删除main,使入口文件不存在

命令行工具:PS C:\Node\modulefindRules>require.js

输出:找不到FOUND文件

你可能感兴趣的:(2019-10-27node.js中模块的加载机制)