Javascript nodejs中的语法巴贝尔

Javascript nodejs中的语法巴贝尔,javascript,node.js,express,syntax-error,babeljs,Javascript,Node.js,Express,Syntax Error,Babeljs,晚上好。我遇到了一个语法问题,我正在迁移到babel,我在下面的语法中遇到了问题。需要一个未命名的模块。在nodejs的默认导入中,我可以导入而不必命名导出的模块并传入应用程序,在babel es6中,我已经找不到类似的东西,但已经成功了 节点默认值 出口 router.get('/',(req,res)=>res.send('test')) module.exports=app=>app.use('/test',路由器) 需要() require('./routes/uploader')(应用

晚上好。我遇到了一个语法问题,我正在迁移到babel,我在下面的语法中遇到了问题。需要一个未命名的模块。在nodejs的默认导入中,我可以导入而不必命名导出的模块并传入应用程序,在babel es6中,我已经找不到类似的东西,但已经成功了

节点默认值

出口

router.get('/',(req,res)=>res.send('test'))
module.exports=app=>app.use('/test',路由器)

需要()

require('./routes/uploader')(应用程序)

巴别塔

出口

router.get('/',(req,res)=>res.send('test'))
导出默认应用=>app.use('/test',路由器)

进口

从“./routes/uploader”导入路由器
路由器(应用程序)


在babel中,我只能通过命名并将应用程序传递到路由器中来执行导入。我做了很多研究,但没有找到更简单的方法。您是否有更好的办法通过在babel上传递应用程序来导出路由器?

require
仍然可以在babel中使用,如果这样做的话

import router from './routes/uploader'
router(app)
考虑到
路由器
功能是
/routes/uploader
默认导出,这是ES模块的实现方式。这不是巴贝尔特有的

路由器
导入名称是自我记录的,可以在不是函数而是其他东西的情况下进行调试。而
require('./routes/uploader')(app)
是Node.js中常见的快捷方式,可能难以读取和调试

你有没有更好的办法通过在babel上传递应用程序来导出路由器

import
语句应该是静态分析的,它不包含应该计算的代码。没有其他方法可以导出它,ES模块是一个对象,所有导出都是对象属性,它是默认的或命名的导出

尽管模块可以设计为不需要使用函数包装导出

它可以是整个应用程序中使用的
app
实例。应用程序应该有一个专用模块,以避免循环依赖:

app.js

index.js

routes.js

另一种更流行的方法是将路由器与应用程序实例解耦。可以安装快速路线,这是一个主要优点:

index.js

route.js


在某些情况下,使用
app=>{…}
包装导出是有益的,但在这里没有必要。无论如何,对于那些确实需要
app
实例的模块来说,这是一个很好的约定,例如,要到达
app.locals

我认为这样做是个好主意
const router=require('./routes/uploader');路由器(应用)
也没有Babel。是的,我同意你的看法,我正在采用Babel,但我会混合一些节点已经支持的内容或Babel,这是一个很好的答案。
export default express();
import app from './app';
import './routes';

app.listen(...);
import app from './app';

app.get(...);
import router from './routes';

const app = express();
app.use(router)
app.listen(...);
const router = express.Router();

router.get(...);

export default router;