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)
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)
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)
我认为缺少一个通用的解决方案,即导出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)
关于我的用例,我在一个文件中有三个可重用的函数。
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)
您也可以在脚本底部导出它们。
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)
对于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)
thenlogin和signUp函数可以在内部UserRouter用作UserController.signUp()和UserController.login()