Hapi.js: «Класс расширяет значение undefined не является конструктором или нулем» - PullRequest
0 голосов
/ 11 сентября 2018

Я хотел бы написать API на Typescript с Hapi.js и веб-паком, который будет транслировать и связывать все приложение.

К сожалению, когда я создаю простейший сервер Hapi (или даже создаю экземпляр сервера), я получаюследующая ошибка:

exports = module.exports = internals.Response = class extends Http.ServerResponse {
                                                                   ^

TypeError: Class extends value undefined is not a constructor or null

`` `

моя версия на хапи - ^ 17.5.4, и набрано ^ 17.0.19, обе должны быть самыми последними версиями.

index.ts

import {Server, ServerOptions} from 'hapi';

const options: ServerOptions = {
    host: 'localhost',
    port: '9000'
}

const server = new Server(options); // instsantiating the server causes the error

webpack.config.ts

const path = require('path');

module.exports = {
    entry: './app/index.ts',
    mode: 'development',
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: 'app.bundle.js',
    },
    resolve: {
        extensions: ['.ts', '.js'],
        modules: [
             "node_modules",
             path.resolve(__dirname, "app")
        ],
    },
    module: {
         rules: [
            { test: /\.ts$/, loader: 'ts-loader' }
         ]
    },
    devtool: 'inline-source-map',
    node: {
        fs: 'empty',
        net: 'empty'
    }
};

tsconfig.json

{
    "compilerOptions": {
        "module": "esnext",
        "target": "es5",
        "noImplicitAny": true,
        "removeComments": true,
        "sourceMap": true,
        "watch": true,
        "forceConsistentCasingInFileNames": true,
        "noImplicitThis": true,
        "lib": ["ES2015", "dom"],
        "moduleResolution": "node"
    },
    "compileOnSave": true,
    "include": [
        "*/src/**/*.ts",
        "*/src/**/*.tsx",
        "*/tests/**/*.ts",
        "*/index.ts",
        "tsd.d.ts"
      ]
}

любая помощь приветствуется!

1 Ответ

0 голосов
/ 13 сентября 2018

Hapi.js имеет косвенную ссылку на встроенный модуль Node http, и по умолчанию Webpack перенаправляет ссылки на встроенные модули Node в свои совместимые с браузером сменные модули, которые могут не обеспечивать все функциональные возможностиУзел встроенных модулей.В этом случае замена для http не имеет экспорта ServerResponse, поэтому вы получаете ошибку во время выполнения.(К сожалению, это не учитывается во время сборки, я полагаю, потому что ts-loader недостаточно умен, чтобы перенаправлять TypeScript на наборы для модулей, совместимых с браузером.)

Предполагается, что вы собираетесь запустить свой пакетв Node необходимо добавить target: 'node' в конфигурацию Webpack, чтобы сообщить Webpack, чтобы разрешить сгенерированному пакету использовать встроенные модули Node без перенаправления.См. документацию .

...