• 导出与导入(require,import,module.exports,exports,export,export default)


    一、不同点

    1、加载时间不同

    require:

            运行时加载

    import:

            编译时加载(效率高)

            【先写调用,后写import导入不报错】

            【加载时机的原因,让import会提升到整个文件的头部】

    2、导入方法不同

    require:

            动态加载,可以写在任何地方

    import:

            静态导入,只能写在代码的最外层,不可以写在函数体中,否则报错

    3、导入模式不同

    require导入的变量

            在源文件中更改后,拿到的还是初始化的值

            ——(对基本数据类型的复制,对引用类型数据的浅拷贝

    import导入的变量

            在源文件中更改后,拿到的的值也会改变(对值的引用,也就是只引用定义)

     4、使用注意事项

    node中

            常使用require/exports./module.exports来导出

            如使用import/export/export default导出需要给package.json中添加type:module字段

    script中

            如引入脚本,无需配置type

            如引入模块,模块若由export default或export导出,要在script标签配置type="module"

    二、require

    a:exports.xxx导出方式

    1. // ei-export.js
    2. exports.add = (x, y) => x + y;
    3. exports.username = "昔冰";
    1. const ex = require("./ei-export");
    2. console.log(ex);
    3. // { add: [Function (anonymous)], username: '昔冰' }

    b:module.exports={}导出方式

    1. // ei-export.js
    2. const add = function (x, y) {
    3. return x + y;
    4. };
    5. const username = "xibing";
    6. module.exports = { add, username };
    1. const ex = require("./ei-export");
    2. console.log(ex);
    3. // { add: [Function (anonymous)], username: '昔冰' }
    4. const { add } = require("./ei-export");
    5. console.log(add(3, 5));
    6. // 8

    三、import

    a:export逐个导出

    1. // ei-export.js
    2. // export对于需要暴露的数据放到一个对象中进行对外导出
    3. const add=(x,y)=>x+y
    4. const username="昔冰"
    5. export {add,username}
    6. // 或挨个对外导出
    7. export const add = (x, y) => x + y;
    8. export const username = "昔冰_G";
    1. import { username } from "./ei-export.js";// 一定要指明文件后缀,否则报错internalBinding('errors').triggerUncaughtException(
    2. console.log(username);// 昔冰

    b:export.default默认导出

    1. // ei-export.js
    2. // export存在默认导出
    3. export const add = (x, y) => x + y;
    4. export const username = "昔冰_G";
    5. const userInfo = {
    6. name: "xibing",
    7. age: 18,
    8. };
    9. export default { // 一个文件中只能有一个默认导出
    10. userInfo,
    11. };
    1. // 指定了则按export对应的来
    2. import { add, username } from "./ei-export.js";
    3. console.log(add(3, 5), username); // 8 昔冰_G
    4. // 如果不指定导入对象则以【默认】导出对象export.default对应的为准
    5. import a from "./ei-export.js";
    6. console.log(a);
    7. // { userInfo: { name: 'xibing', age: 18 } }

    c:import * as

    1. // ei-export.js
    2. export const add = (x, y) => x + y;
    3. export const username = "昔冰_G";
    4. const userInfo = {
    5. name: "xibing",
    6. age: 18,
    7. };
    8. // export默认导出
    9. export default {
    10. userInfo,
    11. };
    1. import * as myModule from "./ei-export.js";
    2. console.log(myModule);
    3. // add [Function: add]
    4. // username "昔冰_G"
    5. // default {userInfo:{name:"xibing",age:18}}

  • 相关阅读:
    Debian 11 更新 Node.js 版本
    web前端-javascript-自增++和自减--(a++和++a,都在自身基础上+1,a--和--a都在自增基础上-1,自增和自减的练习)
    前端网页截图/裁剪 导出网页指定区域为图片(支持导出展示内容自定义)
    kafka安装
    椭圆曲线聚合签名原理 & PBFT 算法改进
    苹果ios打包出来的ipa应用APP怎么不能安装?多种安装不上的原因排查
    基于国产芯片RK1126的智能视频分析网关
    【01】区块链技术概述
    基于springboot跨国旅游系统
    19-29-k8s-基本命令-yaml-kubectl
  • 原文地址:https://blog.csdn.net/qq_38800316/article/details/127496678