Node.js中的语法Babel

时间:2018-08-14 23:43:02

标签: javascript node.js express syntax-error babel

晚上好。我遇到语法问题,正在迁移到babel,以下语法有问题。需要一个未命名的模块。在nodejs的默认导入中,我可以在不命名导出模块并传递应用程序的情况下进行导入,而在babel es6中,我找不到类似的东西,但可以正常使用。

默认节点

  

导出

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

  

require()

require('./routes/uploader')(app)

通天塔

  

导出

router.get('/',(req, res) => res.send('test')) export default app => app.use('/test', router)

  

导入

import router from './routes/uploader' router(app)

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

1 个答案:

答案 0 :(得分:2)

require仍然可以在Babel中使用。

import router from './routes/uploader'
router(app)
考虑到router函数是./routes/uploader的默认导出,

是使用ES模块完成此操作的方式。它不特定于Babel。

router导入名称是自记录的,可以在其不是功能而是其他功能的情况下进行调试。 require('./routes/uploader')(app)是Node.js中常见的快捷方式,可能难以阅读和调试。

  

您是否有更好的主意通过将应用程序传递到babel来导出路由器?

import语句应该进行静态分析,它不包含应该评估的代码。没有其他方法export,ES模块是一个对象,所有导出都是对象属性,它是default或命名为export。

尽管可以将模块设计为不需要将导出内容与函数包装在一起。

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

app.js

export default express();

index.js

import app from './app';
import './routes';

app.listen(...);

routes.js

import app from './app';

app.get(...);

另一种比较流行的方法是将路由器与应用程序实例分离。可以安装快速路线,这是一个主要好处:

index.js

import router from './routes';

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

route.js

const router = express.Router();

router.get(...);

export default router;

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