如何从JS中的文件导出所有函数?

Jak*_*123 18 javascript ecmascript-6

我正在创建一个单位转换器,我想将所有转换函数放入自己的文件中.使用ES6 export,有没有办法只用一行导出文件中的所有函数及其默认名称?例如:

export default all;

这些函数都只在文件中,而不在对象中.

T.J*_*der 34

不,没有通配符导出.

只需将export您想要导出的每个函数声明放在前面,例如

export function foo() {
    // ...
}
export function bar() {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

...或者当然,如果您正在使用函数表达式:

export var foo = function() {
    // ...
};
export let bar = () => {
    // ...
};
export const baz = value => {
    // ...
};
Run Code Online (Sandbox Code Playgroud)

  • @Bergi:我同意(除了箭头函数的可能参数是轻量级的),只是想确保OP知道在哪里以及如何将`export`应用到他们正在做的事情上. (3认同)
  • 我看不出有任何理由在函数表达式中使用赋值。`export function` 声明非常简单,甚至更短。 (2认同)

sco*_*cot 16

您还可以module.exports按如下方式使用:

function myFunction(arg) {
  console.debug(arg);
}
function otherFunction(arg) {
  console.error(arg);
}

module.exports = {
  myFunction: myFunction,
  otherFunction: otherFunction,
};
Run Code Online (Sandbox Code Playgroud)

然后你可以导入它:

import {myFunction, otherFunction} from "./Functions.js";
Run Code Online (Sandbox Code Playgroud)

  • 您无需将姓名写两次。module.exports ={myFunction,otherFunction} 的工作原理是一样的。 (5认同)

ion*_*zer 14

我认为有很多解决方案.正如已经回答的那样,没有通配符导出.但是,你可以'通配'导入.所以,我更喜欢在export你想要从文件中公开的每个函数之前放置一个:

//myfile.js
export function fn1() {...} 
export function fn2() {...}
Run Code Online (Sandbox Code Playgroud)

然后import就像这样:

import * as MyFn from './myfile.js'
Run Code Online (Sandbox Code Playgroud)

之后你可以像这样使用它:

MyFn.fn1();
MyFn.fn2();
Run Code Online (Sandbox Code Playgroud)


Emz*_*zaw 9

我认为缺少一个通用的解决方案,即导出index.js文件:

myModule/myFunctions.js

export const foo = () => { ... }
export const bar = () => { ... }
Run Code Online (Sandbox Code Playgroud)

然后在myModule/index.js

export * from "./myFunctions.js";
Run Code Online (Sandbox Code Playgroud)

这样您就可以简单地导入并使用它:

import { foo, bar } from "myModule";
foo();
bar();
Run Code Online (Sandbox Code Playgroud)


Pav*_*van 8

关于我的用例,我在一个文件中有三个可重用的函数。

utils/reusables.js

export const a = () => {}
export const b = () => {}
export const c = () => {}
Run Code Online (Sandbox Code Playgroud)

为了指向根文件夹而不是单个文件名,我创建了一个名为的文件,该文件index.js将包含单个文件中列出的所有函数。

实用程序/ index.js

export * from './reusables'
Run Code Online (Sandbox Code Playgroud)

现在,当我想使用我的a函数时,我将不得不像这样简单地导入它

import { a } from '../utils'
Run Code Online (Sandbox Code Playgroud)

而不是从它的单个文件中调用它

import { a } from '../utils/reusables'
Run Code Online (Sandbox Code Playgroud)

  • @Qwerty 看起来我忘记添加 `const` 关键字。让我更新我的答案。但是,这应该有效。`导出 const a = () => {}` (2认同)

Clo*_*nch 7

您也可以在脚本底部导出它们。

function cube(x) {
  return x * x * x;
}

const foo = Math.PI + Math.SQRT2;

var graph = {
  options: {
      color:'white',
      thickness:'2px'
  },
  draw: function() {
      console.log('From graph draw function');
  }
}

export { cube, foo, graph };
Run Code Online (Sandbox Code Playgroud)

您还可以在父模块中将子模块聚合在一起,以便它们可以从该模块导入。

// In parentModule.js
export { myFunction, myVariable } from 'childModule1.js';
export { myClass } from 'childModule2.js';

// In top-level module
import { myFunction, myVariable, myClass } from 'parentModule.js'
Run Code Online (Sandbox Code Playgroud)


Pav*_*ndu 5

对于Node.js环境,我为导出函数所做的就是这样。

用户控制器.js

module.exports = {
  signUp: () => {
    return "user"
  },
  login: () => {
    return "login"
  }
}
Run Code Online (Sandbox Code Playgroud)

用户路由器.js

const UserController = require('./UserController')
Run Code Online (Sandbox Code Playgroud)

thenloginsignUp函数可以在内部UserRouter用作UserController.signUp()UserController.login()