首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

导出函数的commonjs模块不会导出汇总抱怨应用

在CommonJS模块系统中,我们可以使用module.exports来导出模块中的函数、对象或者变量。然而,当我们尝试导出一个函数时,可能会遇到一个问题:导出的函数不能直接访问或者调用其他模块中的函数或者变量。

这是因为CommonJS模块系统采用了静态分析的方式,它会在导入时将模块的依赖关系解析并加载到当前模块的作用域中。而在导出函数时,它只会导出函数本身,不会导出函数所依赖的其他模块的信息。

为了解决这个问题,我们可以使用闭包或者将所需的函数作为参数传递给导出的函数。具体实现方式如下:

使用闭包:

代码语言:txt
复制
// module.js
function add(a, b) {
  return a + b;
}

module.exports = function(a, b) {
  return add(a, b);
}

// app.js
const add = require('./module');

console.log(add(2, 3)); // 输出 5

将函数作为参数传递:

代码语言:txt
复制
// module.js
function add(a, b) {
  return a + b;
}

module.exports = function(fn) {
  return function(a, b) {
    return fn(a, b);
  }
}

// app.js
const add = require('./module')(add);

console.log(add(2, 3)); // 输出 5

在上述代码中,我们定义了一个module.js模块,并在其中定义了一个add函数。通过使用闭包或者将add函数作为参数传递给导出的函数,我们可以在应用中调用导出的函数,并成功访问到add函数。

总结一下,导出函数的CommonJS模块不会直接导出依赖的其他模块信息。为了解决这个问题,我们可以使用闭包或者将依赖的函数作为参数传递给导出的函数。这样,我们就可以在应用中正常使用导出的函数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

模块打包中CommonJS与ES6 Module导入与导出问题详解

CommonJS CommonJS模块 CommonJS中规定每个文件是一个模块。每个模块是拥有各自作用域,各自作用域变量互不影响。...标签插入页面中好处在于 插入标签后顶层作用域是全局作用域,在进行变量及函数声明时会污染全局环境;而封装成CommonJS模块会形成一个属于模块自身作用域,所有的变量及函数只有自己能访问...却仍然是原来空对象,因此name属性并不会导出。...这时该模块代码不会再次执行,而是直接导出上次执行后得到结果。...如果将原本是CommonJS模块或任何未开启严格模式代码改写为ES6 Module要注意这点。 ES6 Module导出 在ES6 Module中使用export命令来导出模块

80010

每天3分钟,重学ES6-ES12(十八) CJS

这是我参与「掘金日新计划 · 6 月更文挑战」第30天,点击查看活动详情 每天3分钟,重学ES6-ES12文章汇总 前言 今天开始和大家一起系统学习ES6+,每天3分钟,用一把斗地主时间...是commonJs 在服务器端一个具体有代表性一个实现 webpack打包工具具备对commonJS支持和转换 node 中每一个js文件都有是一个单独模块 包括CommonJS规范核心变量:...require执行细节 require是一个函数,可以帮助我们引入一个文件(模块)中导出对象。...为false表示还没有加载,为true表示已经加载; 结论三:如果有循环引入,Node采用是深度优先算法,寻找模块 CommonJS规范缺点 CommonJS加载模块是同步: 同步意味着只有等到对应模块加载完毕...,当前模块内容才能被运行; 这个在服务器不会有什么问题,因为服务器加载js文件都是本地文件,加载速度非常快; 如果将它应用于浏览器呢?

21420
  • webpack实战——模块打包

    上一篇:webpack实战——打包第一个应用 记录了webpack一些基础内容与一个简单小例子,开启了webpack实战之路,这一篇记录一下关于模块模块打包。...在 CommonJS 中,变量及函数声明不会造成全局污染。...index.js ,说明在 add 中定义变量并不会影响 index ,可以得出使用 CommonJs 模块,作用域只针对于该模块,而不会造成全局污染,对外不可见。...CommonJS 与 ES6 Module 区别 介绍了 CommonJS 与 ES6 Module 基础应用之后,我们也要了解到在实际开发过程中我们经常将这两者在同一个项目中混用。...,到处结果存储到其中,以后再次调用模块直接取值即可,不会再次执行模块;•webpack_require函数:对模块加载实现,在浏览器中可以通过调用此函数模块id来进行模块导入;•modules对象:

    92420

    一文搞懂 JavaScript 模块化规范:CommonJS、AMD、ES6 Module

    在前端开发历史中,模块化一直是一个核心问题。随着 JavaScript 应用程序变得越来越复杂,代码可维护性、复用性和模块需求也越来越迫切。...CommonJS 通过 require() 函数同步加载依赖模块,并使用 module.exports 导出模块成员。...过度依赖回调函数:AMD 模块化规范依赖于回调函数,这会导致代码结构嵌套层级增加,出现俗称“回调地狱”现象,使得代码调试和维护变得更加困难。...独立模块作用域: 每个模块都有独立作用域,模块内部变量、函数不会污染全局作用域,避免了变量命名冲突问题。...而 ES6 Module 支持异步加载,不会阻塞浏览器渲染进程。 模块依赖分析: CommonJS 模块依赖关系在运行时解析,这可能导致加载时性能开销。

    8810

    探索 模块打包 exports和require 与 export和import 用法和区别

    /api/module/commonJS_exports'); //再调用一次导入,发现导入模块不会再次执行,而是直接导出上次执行后得到结果 require('.....JavaScript属于动态类型语言,不会在代码执行前检查类型错误(比如对一个字符串类型值进行函数调用)。ES6 Module静态模块结构有助于确保模块之间传递值或接口类型是正确。...,不会随着被夹在模块中原有值变化而变化。...每个模块只在第一次被加载时候执行,之后其导出值就被存储到这个对象里面,当再次被加载时候直接从这里取值,而不会重新执行。 __webpack_require__函数。...key可以理解为一个模块id, 由数字或者一个很短hash字符串构成;value则是由一个匿名函数包裹模块实体,匿名函数参数则赋予了每个模块导出和导入能力。

    1.7K10

    每天3分钟,重学ES6-ES12(十八)ES Module

    ,重学ES6+,前面我们介绍了模块历史,今天介绍模块化处理方案 ES Module JavaScript没有模块化一直是它痛点,所以才会产生我们前面学习社区规范:CommonJS、AMD、CMD...ES Module和CommonJS模块化有一些不同之处: 一方面它使用了import和export关键字; 另一方面它采用编译期静态分析,并且也加入了动态引用方式; ES Module模块采用...关键字 export关键字将一个模块变量、函数、类等导出; 我们希望将其他中内容全部导出,它可以有如下方式: 方式一:在语句声明前面直接加上export关键字 方式二:将所有需要导出标识符...// 2.默认导出方式二: 常见 export default foo // 注意: 默认导出只能有一个 import函数 通过import加载一个模块,是不可以在其放到逻辑代码中,比如:...path值; 但是某些情况下,我们确确实实希望动态来加载某一个模块: 如果根据不懂条件,动态来选择加载模块路径; 这个时候我们需要使用 import() 函数来动态加载; import

    25730

    javaScript模块化解析「建议收藏」

    事实上模块化开发最终目的是将程序划分成一个个小结构; 这个结构中编写属于自己逻辑代码,有自己作用域,不会影响到其他结构; 这个结构可以将自己希望暴露变量、函数、对象等导出给其结构使用; 也可以通过某种方式...; require函数可以帮助我们导入其他模块(自定义模块、系统模块、第三方库模块)中内容; 模块化案例 exports导出 注意:exports是一个对象,我们可以在这个对象中添加很多个属性,添加属性会导出...require是一个函数,可以帮助我们引入一个文件(模块)中导出对象。...; 这个在服务器不会有什么问题,因为服务器加载js文件都是本地文件,加载速度非常快; 如果将它应用于浏览器呢?...ES Modules,另一方面借助于webpack等工具可以实现对CommonJS或者ES Module代码转换; AMD和CMD已经使用非常少了,所以这里我们进行简单介绍; AMD规范 AMD主要是应用于浏览器一种模块化规范

    45420

    抖音二面:为什么模块循环依赖不会死循环?CommonJS和ES Module处理有什么不同?

    CommonJS CommonJS发明者希望它能让服务端和客户端通用(Common)。但如果一直从事纯前端开发,应该对它不太熟悉,因为它原本是叫ServerJS,它主要被应用于Node服务端。...require函数模块引入,使用exports对象来做模块导出,这里require exports正是CommmonJS规范提供给我们,使用断点调试,可以看到这几个核心变量: exports...循环引入 和CommonJS一样,发生循环引用时并不会导致死循环,但两者处理方式大有不同。...结语 回到开头三个问题,答案在文中不难找到: CommonJS和ES Module都对循环引入做了处理,不会进入死循环,但方式不同: CommonJS借助模块缓存,遇到require函数会先检查是否有缓存...,已经有的则不会进入执行,在模块缓存中还记录着导出变量拷贝值; ES Module借助模块地图,已经进入过模块标注为获取中,遇到import语句会去检查这个地图,已经标注为获取中不会进入,地图中每一个节点是一个模块记录

    1.7K10

    js模块

    Commonjs(值拷贝和动态声明) commonjs是基于服务端而设计,规定一个文件就是一个模块,每个模块都有自身作用域,所有的变量和函数都只有自己能访问,每个模块内部都有一个module对象,代表当前模块...commonjs导出是值拷贝,可以对导入值进行修改,但因为是值拷贝,所以不会影响原模块 // CommonJS // a.js let a = 1; let b = 2; module.exports.../a.js" type="module"> ESM对比commonjs优势: 死代码检测和排除:可以使用静态分析工具判断哪些模块不会执行,在打包时去掉这部分无用模块...es6目前已经得到大多现代浏览器支持,但在应用中还需要等待一段时间,原因: 无法使用code splitting 大多Npm包还是commonjs形式,浏览器不支持此语法,因此这些包无法直接使用 仍要考虑个别浏览器及平台兼容问题...通过UMD可以在不同环境选择对应模块规范。比如nodejs使用commonjs,在浏览器下支持AMD,采用AMD模块,否则导出为全局函数

    4.5K65

    聊聊CommonJS与ES6 Module使用与区别

    CommonJS CommonJS是2009年由JavaScript社区提出包含了模块一个标准,后来被Node.js所采用并实现,也就是说我们在Node.js中用到模块导入导出都是依照CommonJS...标准来实现 1.1 导出 我们可以把一个文件看成一个模块,每个模块之间是互相独立,即不会互相影响。...当需要使用到某个模块时,只需在文件中将目标模块导入即可 要想被其它模块导入首先需要导出需要向外暴露变量或方法,在CommonJS导出语法有以下两种方式 // B.js // 定义了函数show function...default 表示导出该变量或函数是匿名 注意: 一个模块只能默认导出一次,否则就会报错,具体原因会在后面讲解 2.2 导入 ES6 Module 导入用到关键字是 import ,具体代码如下...和 函数 change,因为导入 count 只是对原有值一个拷贝,因此尽管我们调用了函数 change 改变了 B.js 文件中变量 count 值,也不会影响到 A.js 文件中变量 count

    1.4K31

    JavaScript——请列出目前主流 JavaScript 模块化实现技术有哪些?说出它们区别?

    前言 目前流行js模块化规范有CommonJS、AMD、CMD以及ES6模块系统 步骤 一、CommonJS CommonJS出发点: JS没有完善模块系统,标准库较少,缺少包管理工具。...1.export export可以导出是一个对象中包含多个属性、方法。export default只能导出一个可以不具名函数。我们可以通过import进行引用。...主要是在nodejs 也就是服务端应用模块化机制,通过 module.export 导出声明,通过 require('') 加载。每个文件都是一个模块。...他有自己作用域,文件内变量,属性函数等不能被外界访问。node会将模块缓存,第二次加载会直接在缓存中获取。 AMD是异步加载。主要应用在浏览器环境下。...,导入这里也会跟着变,ES6模块是动态引用,并不会缓存值,模块里总是绑定其所在模块

    13010

    exports?export?傻傻分不清楚

    CommonJS规范提出,主要是为了弥补JavaScript没有标准缺陷,已达到像Python、Ruby和Java那样具备开发大型应用基础能力,而不是停留在开发浏览器端小脚本程序阶段。...导出/导入 export default 和 module.exports 在简单编码后,我们将函数 whatsThis 导出,这让函数能够在外部使用和调用。 那么应该怎么调用或使用这个函数呢?...正确输出了 whatsThis 函数内容 通过以上代码,我们知道 ES6  和 CommonJS 模块导入导出在其语法形式表现上略有不同 操作 ES6 CommonJS 导出 export default...… module.exports = {} 导入 import … form '' require() 至此,ES6  和 CommonJS 模块规范导入导出基本展示完成。...结果如下: ES6 指向是 undefined,CommonJS 指向是空 Object 这是因为在各自规范当中每一个模块都是一个独立作用域互不干扰,所以 this 并不会因为作用提升而跳出模块作用域

    74450

    「万字进阶」深入浅出 Commonjs 和 Es Module

    目前 commonjs 广泛应用于以下几个场景: Node 是 CommonJS 在服务器端一个具有代表性实现; Browserify 是 CommonJS 在浏览器中一种实现; webpack 打包工具对...CommonJS 支持和转换;也就是前端应用也可以在编译之前,尽情使用 CommonJS 进行开发。...; exports 和 module.exports 可以负责对模块内容进行导出; require 函数可以帮助我们导入其他模块(自定义模块、系统模块、第三方库模块)中内容; commonjs 使用初体验...假设 wrap 就是 Commonjs 规范下包装函数,我们 js 代码就是包装函数内部内容。...Commonjs 总结 Commonjs 特性如下: CommonJS 模块由 JS 运行时实现。 CommonJs 是单个值导出,本质上导出就是 exports 属性。

    3.3K31

    CommonJS规范

    CommonJS 是一种模块化规范,被广泛应用于 Node.js 等环境中。它通过使用 require 和 module.exports 来定义和导出模块。...ES Modules 是 ECMAScript 6(ES6)引入官方模块化规范,也被称为 ES6 模块。它使用 import 和 export 关键字来导入和导出模块。...与 CommonJS 类似,ES Modules 也具有独立作用域和明确模块依赖关系。它已成为现代浏览器和 Node.js 中标准模块化方案。...模块定义: 每个文件都是一个独立模块,文件中代码被视为该模块私有作用域。在一个模块中定义变量、函数或类默认是私有的,不会被其他模块直接访问。 Commonjs规范 1....模块导出 使用module.exports关键词进行导出 可以导出一个函数,一个变量,一个对象等等  // 定义三个工具函数  function addNum(...args) {

    8710

    「万字进阶」深入浅出 Commonjs 和 Es Module

    目前 commonjs 广泛应用于以下几个场景: Node 是 CommonJS 在服务器端一个具有代表性实现; Browserify 是 CommonJS 在浏览器中一种实现; webpack 打包工具对...CommonJS 支持和转换;也就是前端应用也可以在编译之前,尽情使用 CommonJS 进行开发。...; exports 和 module.exports 可以负责对模块内容进行导出; require 函数可以帮助我们导入其他模块(自定义模块、系统模块、第三方库模块)中内容; commonjs 使用初体验...假设 wrap 就是 Commonjs 规范下包装函数,我们 js 代码就是包装函数内部内容。...Commonjs 总结 Commonjs 特性如下: CommonJS 模块由 JS 运行时实现。 CommonJs 是单个值导出,本质上导出就是 exports 属性。

    2.3K10

    前端模块

    所以这时候有了 AMD 规范,即异步模块加载规范。 AMD 与 CommonJS 主要区别就是异步模块加载 —— 即使 require 模块还没有获取到,也不会影响后面代码执行。...import 在非整体加载时候要求我们事先知道导出变量或者函数名字,但是如果使用 export default 导出,那么后续加载模块时候,名字可以任取,也就是说,我们并不需要知道原模块中变量或者函数名字...模块输出是值拷贝: 也就是说,输出之后,原模块内部该值怎么变化,都不会影响到导出那个值,两者在内存中有各自空间。...详情看: 如何正确证明 CommonJS 模块导出是值拷贝,而 ES module 是值引用?...对于 ES6,在编译阶段遇到 import 时,不会CommonJS 一样去执行模块,而是生成一个动态只读引用,当真正需要时候再到模块里去取值,所以 ES6模块是动态引用,并且不会缓存值。

    71120

    浅谈前端各种模块

    什么是模块化 前端模块化是指将一个大型前端应用程序分解为小、独立模块,每个模块都有自己功能和接口,可以被其他模块使用。 前端模块出现是为了解决前端开发中代码复杂度和可维护性问题。...可扩展性差: 在传统前端开发中,很难对应用程序进行扩展。 前端模块演进历程 全局 function 模式 将不同功能封装成不同函数。...如果想在其他模块中使用该模块内部变量、函数和类等,需要将其导出。 加载方式 在 CommonJS 规范中,模块加载方式是同步。.../moduleA'); // 访问其他模块导出变量 console.log(moduleA.name); // 访问其他模块导出函数 moduleA.sayHello(); 特点 CommonJS...CommonJS 模块输出是值拷贝,本质上导出就是 exports 属性。 CommonJS 是可以动态加载,对每一个加载都存在缓存,可以有效解决循环引用问题。

    18110

    前端模块化-总结_前端模块化规范

    commonjs 规范应用于 nodejs 应用中,在 nodejs 应用中每个文件就是一个模块,拥有自己作用域,文件中变量、函数都是私有的,与其他文件相隔离。...,这时候就不会影响导出。​​​​​​​...隔离性 commonjs 规范是在运行时加载,在运行时导出对象,导出对象与原本模块对象是隔离,简单说就是克隆了一份。...fun 方法,fun 方法改变了模块 object 对象,可是在 index.js 中导出 object 对象并没有发生改变,所以可见 commonjs 规范下模块导出是深克隆。...、 原本模块代码被有 require module exports 这三个参数函数所包裹,其中 require 用来加载其他模块,exports 用来导出对象。 !

    61320
    领券