JavaScript模块化module的概念

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ClamReason/article/details/82870090

Node背景介绍

Node是一个js文件的执行环境,所以可以执行任何js文件。在命令行输入:node  yourJSFileName.js 即可,执行js文件中的内容。

模块化module

node既然可以执行js文件,肯定一个文件解决的问题有限(不方便维护)。所以,js文件可以引用其他js文件。一个js文件就是一个模块module。详细参考官方说明文档: https://nodejs.org/api/modules.html

这里列出最基础的模块化的官方的例子:每一个js文件都被看成是一个模块。例如下面的 foo.js:

const circle = require('./circle.js');
console.log(`The area of a circle of radius 4 is ${circle.area(4)}`);

第一行加载了模块 circle.js,其中circle.js的内容如下:

const { PI } = Math;

exports.area = (r) => PI * r ** 2;

exports.circumference = (r) => 2 * PI * r;

一个文件中导出的内容总是显示的或者隐式的追加到exports对象,当其他文件使用var obj = require('yourJsFileName.js');来引入文件时,导出的内容都变成了obj的成员可以直接使用。模块中的变量如果不导出就是私有的,外部无法获取。

彻底搞清楚javascript中的require、import和export

JavaScript模块的历史:

1 文件内的多个函数互相组成一个模块;

2 将文件中的多个函数放到一个类里面,同时保护自己的成员变量不外露;

3 require()统治的时代,一个文件成为一个整体的模块,被require的文件内使用exports关键字导出对象或者函数

exports.area = (r) => PI * r * r;

这种方式会导致客户端加载require模块的时候依赖网络传输,容易出现假死。所以,客户端加载require使用异步加载。

4 ES6的时代:

JavaScript  :导出 export、导入import

Node.js       :导出exports、导入require

5 export default,export default仅有一个,通过export方式导出,在导入时要加{ },命名式导出可以导出多个值,但在在import引用时,也要使用相同的名称来引用相应的值。export default则不需要。从而应该使用export default,将所有需要导出的都放到export default中。 详细参考:https://www.cnblogs.com/xiaotanke/p/7448383.html

默认导出:

使用默认导出一个模块时:

1

2

3

4

// "my-module.js"模块

export default function (x) {

return x * x * x;

}

在另一个模块(脚本文件)中,我们可以像下面这样引用,相对名称导出来说使用更为简单:

1

2

3

// 引用 "my-module.js"模块

import cube from 'my-module';

console.log(cube(3)); // 27

而如果是命名导出就要(放到大括号{a, b, c})逐个导出,逐个导入

猜你喜欢

转载自blog.csdn.net/ClamReason/article/details/82870090