js模块化

一、何为模块化?

javascript中,有两种格式的模块,一种是Node.js专用的CommonJS模块,简称CJS,另一种为,ES6模块简称ESM。

二、两种模块的差异(CommonJS和ESM)、

  • CommonJS是使用require()方法引入,module.exports进行抛出,而ESM是使用import引入,export抛出
  • CommonJS是同步执行的,而ESM是异步执行的!

三、node中模块分类

在nodejs中,应用有模块组成,一个js文件就是一个模块,每个js文件都是一个独立的作用域,在这个文件中定义的变量,函数,对象,都是私有的,对其他文件不可见

  • 核心模块

    由node本身提供,不需要自行安装,可以直接引用

    例:

    1、fs模块(文件操作模块)

    const fs = require('fs')
    
    fs.readFileSyc(url,codeformat)//读取文件内容,使用变量接收返回值(同步执行)
    fs.readFile(url,codeformat,callback(error,data))//读取文件内容,回调函数中的data为读取的数据(异步执行)
    

    2、http模块(网络操作模块)

    const http = require('http')
    var server = http.createServer(function(request,response){}).listen(port)
    server.on('request',function(request,response){
        
    })
    

    3、url模块(解析地址模块)

    var myurl = new URL(input,base)
    myurl.search  //获取地址后面传值
    myurl.searchparams.get(attribute)
    myurl.pathname //获取url的路径部分
    
    

    4、path模块(路径操作模块)

    const path = require('path')
    path.extname('index.html') //extname返回文件后缀名
    __dirname  返回当前文件的绝对路径
    

    5、querystring模块(解析参数字符串的模块)

  • 第三方模块

    由社区或者个人提供的模块,需要通过npm或者cnpm进行安装后使用

    例:

    1、nodemon (实时运行模块)

    这个安装后使用命令行工具

    node index.js(正常命令)

    nodemon index.js(使用nodemon命令)

    2、mysql (数据库连接操作模块)

    const mysql = require('mysql')
    var connection = mysql.createconnect({
        "host":'localhost',
        "user":"root",
        "password":"root",
        "database":"sys",
        "port":"3306"
    })
    connection.query(sql,sqlbind,callback)//执行SQL命令
    

    3、mime (判断请求文件的类型)

    const = require('mime')
    var url = "index.js";
    var type = mime.getType(url)
    

    4、moment (时间转换模块)

    const moment = require('moment')
    //创建一个时间戳
    var date = Date.now()
    //使用moment中的函数进行格式转化
    console.log(moment(date).format('YYYY年MM月DD日 HH:mm:SS'))
    
    
  • 自定义模块

    由我们自己创建的js文件

    使用module对象里的exports对象抛出一个模块,使其他文件可以引用这个模块中的方法或变量

    演示:

    //module1.js文件
    var a=1;
    var b=2;
    function sum(a,b){
        return a+b
    }
    //抛出模块
    module.exports={
        a,
        b,
        sum
    }
    
    
    //module2.js文件(引入module1.js模块)
    var res = require('./module1')//引入模块,注意路径,根据实际路径写入(可以不加后缀名)
    console.log(res.sum(res.a,res.b))//输出结果为3
    

四、ES6模块

使用ESM跟CommonJS的用法有好多不同之处,比如文件后缀名以及,package.json文件的配置

  • 如果nodejs中要是用引用ES6模块,写有import方法的文件和写有export方法的文件的后缀名,必须是mjs,如果希望改变后缀名的话可以在package.json文件中写入:

    {
        "type":"module"
    }
    

    演示代码:

    //module1.mjs文件
    
    let a = 'hellow'
    let b = 'word'
    export {
        a,
        b
    }
    
    
    //module2.mjs文件(需要使用module1.mjs文件)
    import {a,b} from "./module1.mjs";//引入的变量或方法,需要使用逗号隔开,需要使用花括号括起来。(路径必须写后缀名)
    console.log(a,b)//输出结果为hellow word
    
  • 如果想要在前端页面中的js脚本中使用ESM需要在script标签引入的时候加type属性为module

    演示代码:

    <--index.html 文件 -->
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <--script标签引入时要加type属性为module-->
        <script type="module" src="./module2.js"></script>
    </body>
    </html>
    
    //module1.js文件
    let a='hellow'
    let b='word'
    let sum = (a,b)=>{
        console.log(a+" "+b)
    }
    export {
        a,
        b,
        sum
    }
    
    //module2.js文件
    import { a,b,sum } from './module1.js';//注意加后缀
    console.log(a,b)//输出结果为hellow word
    sum(a,b)//输出结果为hellow word
    
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

要爆炸的臭臭君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值