【问题标题】:How do you import a function with parameters using ECMAScrip6?如何使用 ECMAScrip6 导入带参数的函数?
【发布时间】:2018-08-28 00:47:23
【问题描述】:


我正在使用 BabelESLintExpress 中设置一个全新的项目,并尝试设置动态路由。唯一的问题是我无法弄清楚如何为路线调用加载程序。这是我当前关于加载程序的代码。

routes/index.js

import fs from 'fs';

/**
 * Register Default Routes
 * @param {Object} app express.Application
 */
export default function(app) {
    fs.readdirSync(__dirname).forEach((fileName) => {
        if (fileName == __filename.slice(__dirname.length + 1)) return;
        let fileNameStripped = fileName.substring(0, fileName.lastIndexOf('.'));
        require('./' + fileNameStripped)(app); // does not work
    });
}

index.js

import express from 'express';
import routes from './routes/index.js';

const app = express();

app.use(express.static('public'));

routes(app); // works now

...

Babel 错误

TypeError: require(...) is not a function
    at /app/build/routes/index.js:1:314
    at Array.forEach (<anonymous>)
    at exports.default (/app/build/routes/index.js:1:195)
    at Object.<anonymous> (/app/build/index.js:1:393)    
    at Module._compile (module.js:649:30)
    at Object.Module._extensions..js (module.js:660:10)
    at Module.load (module.js:561:32)
    at tryModuleLoad (module.js:501:12)
    at Function.Module._load (module.js:493:3)
    at Function.Module.runMain (module.js:690:10)

这个问题似乎与https://github.com/babel/babel/issues/2683有关

【问题讨论】:

  • 这是基于stackoverflow.com/questions/29923879/…,尽管它不起作用。
  • 目前还不清楚是什么问题。上面的代码是否对您不起作用,如果不起作用,它有什么问题?我不明白为什么它是一个进口很重要。这是一个可以接受参数的函数,无论是否导入。
  • 这个问题是没有调用该函数,routes/index.js和index.js中的那个
  • 嗯,它应该,因为你叫它。如果有问题,应该有错误。目前没有人可以调试它。考虑提供可以复制问题的stackoverflow.com/help/mcve - 回购、在线服务或其他。否则,该问题将被视为题外话。
  • 好的,正在编辑..

标签: node.js express ecmascript-6 babeljs


【解决方案1】:

因为嵌套路由文件应该是带有default 导出的ES 模块,所以require('./' + fileNameStripped) 是模块对象而不是函数。应该是:

require('./' + fileNameStripped).default(app);

根据 Babel 配置(需要dynamic-import-node 插件),require() 可以替换为动态import(),但这里不太理想,因为动态import 不是同步的,可能会导致竞争条件。

【讨论】:

    猜你喜欢
    • 2014-09-22
    • 1970-01-01
    • 2022-01-15
    • 2016-11-13
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    相关资源
    最近更新 更多