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

我正在创建一个单位转换器,我想把所有的转换函数到他们自己的文件。使用 ES6export,是否有办法只使用一行导出文件中所有具有默认名称的函数?例如:

export default all;

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

182469 次浏览

No, there's no wildcard export (except when you're re-exporting everything from another module, but that's not what you're asking about).

Simply put export in front of each function declaration you want exported, e.g.

export function foo() {
// ...
}
export function bar() {
// ...
}

...or of course, if you're using function expressions:

export var foo = function() {
// ...
};
export let bar = () => {
// ...
};
export const baz = value => {
// ...
};

I think there are a lot of solutions to this. And as has been answered, there's no wildcard export. But, you can 'wildcard' the import. So, I much prefer the one putting export before each of the functions you want to expose from the file:

//myfile.js
export function fn1() {...}
export function fn2() {...}

and then import it like so:

import * as MyFn from './myfile.js'

Afterwards you could use it like so:

MyFn.fn1();
MyFn.fn2();

For Node.js environment, what I did to export functions was this.

UserController.js

module.exports = {
signUp: () => {
return "user"
},
login: () => {
return "login"
}
}

UserRouter.js

const UserController = require('./UserController')

then login and signUp functions could be used inside UserRouter as UserController.signUp() and UserController.login()

You could also export them at the bottom of your script.

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 };

You can also aggregate submodules together in a parent module so that they are available to import from that module.

// 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'

You can also use module.exports as follows:

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


module.exports = {
myFunction: myFunction,
otherFunction: otherFunction,
};

Then you can import it:

import {myFunction, otherFunction} from "./Functions.js";

I think there's a missing common solution, which is exporting in index.js file:

myModule/myFunctions.js

export const foo = () => { ... }
export const bar = () => { ... }

then in myModule/index.js

export * from "./myFunctions.js";

This way you can simply import and use it with:

import { foo, bar } from "myModule";
foo();
bar();

In my use case, I do have three reusable functions in one file.

utils/reusables.js

export const a = () => {}
export const b = () => {}
export const c = () => {}

In order to point the root folder instead of individual file names, I created a file called index.js which will comprise of all the functions that are listed in individual files.

utils/index.js

export * from './reusables'

Now, when I want to use my a function, I will have to simply import it like this

import { a } from '../utils'

Rather than calling it from its individual files

import { a } from '../utils/reusables'

functions.js

function alpha(msj) {
console.log('In alpha: ' + msj);
}


function beta(msj) {
console.log('In beta: ' + msj);
}


module.exports = {
alpha,
beta
};

main.js

const functions = require('./functions');
functions.alpha('Hi');
functions.beta('Hello');

Run

node main.js

Output

In alpha: Hi
In beta: Hello