машинопись как динамически импортировать? - PullRequest
0 голосов
/ 01 июля 2019

У меня был какой-то JS, который динамически импортировал бы и добавил несколько маршрутов, таких как:

let routeFiles = [
  './routes/projects',
  './routes/scraper',
  './routes/admin',
  // etc
]

initRoutes(app) {
  for (let fn of routeFiles) {
    let routes = require(fn)
    app.use('/tix', routes)
  }
  debug.info('init routes done')
}

Но с машинописью я получаю ошибку

An import declaration can only be used in a namespace or module.

Просмотр вокруг не даёт 'Кажется, я не могу дать четкий ответ

const mod = await require(fp)

. Это дает мне ошибку, поскольку я не могу найти модуль как ., хотя я проверил передаваемый путь:

(node:33353) UnhandledPromiseRejectionWarning: Error: Error: Cannot find module "."
    at Object.<anonymous> (/Users/dc/dev/tix/recobot/stack/backend/build/server.js:843:23)
    at Generator.next (<anonymous>)
    at /Users/dc/dev/tix/recobot/stack/backend/build/server.js:800:71
    at new Promise (<anonymous>)
    at __awaiter (/Users/dc/dev/tix/recobot/stack/backend/build/server.js:796:12)
    at Object.initModels (/Users/dc/dev/tix/recobot/stack/backend/build/server.js:821:16)
    at Object.<anonymous> (/Users/dc/dev/tix/recobot/stack/backend/build/server.js:527:28)
    at Generator.next (<anonymous>)
    at fulfilled (/Users/dc/dev/tix/recobot/stack/backend/build/server.js:497:58)
    at process._tickCallback (internal/process/next_tick.js:68:7)

на основе https://www.typescriptlang.org/docs/handbook/modules.html#optional-module-loading-and-other-advanced-loading-scenarios

Я также пытался запутать:

  mod = await System.import(fn)
  mod.init()

та же ошибка

Error: Cannot find module './models/Projects'.

Если я подниму импорт вне основного блока кодавсе работает нормально.

import Project from "./models/Projects"

const TixBot = {

  async initModels(dbc: any) {
     await Project.init(dbc)

Кстати, я работаю в веб-пакете, в котором возникла эта проблема: https://github.com/webpack/webpack/issues/1599

решена с помощью

  node: {
    __dirname: true
  },

в файле webpack.config.чувак, иногда я боюсь смотреть свысока при работе над современным JS ...

не очень полезно: машинописный текст: динамически импортировать классы

связано и интересно https://blog.atomist.com/typescript-imports/

...