js模块化

传统方式

cdn导入

<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>

下载后导入

<script src="./jquery.js"></script>
<script src="./test1.js"></script>
<script src="./main.js"></script>

这样的方式有两个弊端:

  • 一个是容易污染全局作用域
  • 一个是需要注意引入的顺序

传统的库用立即执行函数产生闭包的方式解决这个问题,如jQuery。

javascript中的几种模块化

CommonJS模块化

例子

add.js

function add(a, b) {
  return a + b;
}

function multiply(a, b) {
  return a * b;
}

// 导出如下
module.exports = {
  add: add,
  multiply: multiply,
};

subtract.js

function subtract(a, b) {
  return a - b;
}

// 导出如下
module.exports = subtract;

 index.js

// 导入如下
const { add } = require("./add");
const subtract = require("./subtract");

module.exports = { add, subtract };

 main.js

// 只写文件夹名,默认导入的就是文件夹下的index.js文件
const { add, subtract } = require("./functions");
console.log(add(1, 2));
console.log(subtract(1, 2));

文件目录如下 

 

ESM模块化

ECMAScript 2015 开始支持 JavaScript module,ESM 就是 ES Module的简称 就是ES标准的模块化方式。

注意:主代码文件导入时 script标签要添加 type module的属性和值。

<script type="module" src="xxxxxx.js"></script>

导出 

分为 默认导出 和命名导出(一般导出)。

默认导出

默认导出 export 后要加 default,每个文件只能默认导出一次。

默认导出不需要命名,可以在导入时指定任意名称。

常见的导出:函数 class 对象 数组等。

export default function abc(){}
export default function (){} // 可以导出匿名函数

 命名导出

命名导出,导出的一定要有名称 name属性。

export function abc(){}

export class Test{}

export const a = 1 // 注意 导出变量时要直接带上变量声明关键字

解构后直接导出

export const { deposit, withdraw, requestLoan, payLoan } = accountSlice.actions;

可以通过花括号的形式一起导出。

function abc(){}

class Test{}

const a = 1

export {a,abc,T}

 导入

也分为默认导入和命名导入(一般导入)。

注意导入时文件地址的写法:

  • 要加后缀名
  • 要加前面的./路径符号

如果使用构建工具的话就不需要了

默认导入

默认导入只会导入默认导出的,可以随意定义标识符

import my from './xxxx.js'

 命名导入

命名导出要跟命名导出时一样的名字,花括号的形式去取,前后顺序没关系。

import {abc,Test} from './xxxx.js'

注意:这里的./不能省略!不能省略 "./" 的原因是为了区分相对路径导入和裸导入(bare imports),裸导入只能用于导入已安装的 npm 包或 Node.js 内置模块 ,比如

`import {Application, Spritem, Assets} from "pixi.js"`。

 一起导入

将模块 ‘./xxxxx.js’ 的 所有命名导出(named exports) 绑定到一个名为 all的命名空间对象上

import * as all from './xxxx.js'

导入导出重命名 

// 导出时重命名
export {
function1 as newFunctionName,
function2 as anotherNewFunctionName
};


import { newFunctionName, anotherNewFunctionName } from '/modules/module.js';

注意:这样也相当于默认导出 。

export {Pixiplugin as default}
// 导入时重命名

import { function1 as newFunctionName,
         function2 as anotherNewFunctionName } from '/modules/module.js';

 动态加载

import('/modules/myModule.mjs')
  .then((module) => {
    // 代码逻辑
  });

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值