【问题标题】:What is the difference between export function and module.exports?导出函数和module.exports有什么区别?
【发布时间】:2020-05-02 04:03:42
【问题描述】:

我有一个 Javascript 文件 utils.js,其中包含一些实用功能。这是一个例子:

export function RemoveHTML(Str) {
    return Str.replace(/<[^>]*(?:>|$)/gi,'');
}

我可以通过像这样导入utils.js 文件来使用这些功能:

import {RemoveHTML} from '../js/utils.js';

我还有一个model.js 文件,用于一些这样的数据查询(为简洁起见,使用伪代码):

async function getStuff() {
    await DBConnection.connect();
    return results
}

module.exports = {
  getStuff
}

为了“一致性”,我想我会将model.js 更改为:

export async function getStuff() {
    await DBConnection.connect();
    return results
}

如果我这样做了,我会收到一个应用程序崩溃错误说明:

SyntaxError: Unexpected token 'export'

使用export function()module.exports 导出函数有什么区别?

更新:

我在Webpack 中使用Babel,如下所示,为什么会出现错误?:

{
      test: /\.js$/,
        include: [ srcPath ],
      exclude: ['/node_modules/'],
      use: {
        loader: 'babel-loader',
        options: {
          presets: ["@babel/preset-env"]  //Preset used for env setup
        }
      }
    },

【问题讨论】:

  • export 和 import 是 nodejs 本身不支持的 es6 功能(取决于版本)。要么使用 babel 进行编译,要么设置 package.json 类型模块或使用 mjs(再次取决于 nodejs 版本)
  • export 语法是新的,NodeJS 还不支持。 module.exports 是 NodeJS 提供模块的方式,因此可以在本地工作。
  • 我在我的 Webpack 构建中使用 Babel。所以我不应该得到这个错误吗?

标签: javascript node.js webpack babeljs


【解决方案1】:

export function() 是用于导出的ES6 语法,而module.exports 是或exports 是默认情况下包含在Node.js 应用程序中的每个JS 文件中的特殊对象。
您还可以使用 ES6 语法在 Node.js 中导出/导入模块,但要使用它,您必须将新的 ES6 代码转换为 Node.js 支持的 ES5 格式,您可以轻松做到这一点使用babel(这是一个转译JavaScript的工具)。

【讨论】:

  • 我在 Webpack 中使用 Babel,但还是报错?
  • 你有.babelrc 文件吗?
  • 不,我在我的项目中看不到任何.babelrc 文件。
  • 你需要一个 babel 配置文件才能让 babel 工作。
  • 你可以通过这个小教程来设置它robinwieruch.de/minimal-node-js-babel-setup#nodejs-with-babel
【解决方案2】:

@JonasWilms 关于他的观点绝对正确。我看到您在服务器代码上使用 commonjs,在客户端使用 es6。

module.export 和 export 没有区别。在您的项目中,您的服务器代码正在使用 commonjs 模块,因此您应该使用 module.exports。在您的客户端代码中,继续使用 JavaScript 的导出 (es6) 语法。

但是如果你想用 es6 全局编写你的 javascript,你将不得不安装一些依赖项并配置你的 babel。

查看此链接https://www.codementor.io/@iykyvic/writing-your-nodejs-apps-using-es6-6dh0edw2o

【讨论】:

    猜你喜欢
    • 2018-10-31
    • 2016-05-26
    • 2022-10-24
    • 2014-06-04
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 2020-10-10
    相关资源
    最近更新 更多