MQTT.js и Webpack - «WS не конструктор» - PullRequest
0 голосов
/ 14 марта 2019

Я пытаюсь связать один из наших микросервисов, который использует MQTT.js, и я борюсь с действительно странной проблемой.

Он отлично работает без комплектации, поэтому ws доступен в node_modules.

Материал, который, я думаю, имеет значение:

ошибка:

    TypeError: WS is not a constructor
        at WebSocketStream (dist/index.js:159329:16)
        at createWebSocket (dist/index.js:147450:10)
        at Object.buildBuilderBrowser (dist/index.js:147476:10)
        at MqttClient.wrapper [as streamBuilder] (dist/index.js:147937:36)
        at MqttClient._setupStream (dist/index.js:146471:22)
        at new MqttClient (dist/index.js:146452:8)
        at Function.connect (dist/index.js:147940:10)

Конфигурация веб-пакета:

const path = require('path');
const nodeExternals = require('webpack-node-externals');

const { NODE_ENV = 'production' } = process.env;

module.exports = {
  entry: { index: './src/index.ts' },
  mode: NODE_ENV,
  target: 'node',
  watch: NODE_ENV === 'development',
  externals: [nodeExternals()],
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: '[name].js',
  },
  resolve: {
    extensions: ['.ts', '.js'],
  },
  node: {
    __dirname: false,
  },
  module: {
    rules: [
      {
        test: /\.ts$/,
        use: [{ loader: 'ts-loader', options: { transpileOnly: true } }],
      },
      {
        test: /(\.md|\.map)$/,
        loader: 'null-loader',
      },
    ],
  },
};

Функция, где это происходит:

createMqttClient(): MqttClient {
    return mqtt.connect(this.mqttOptions.url, { ...this.mqttOptions.options });
  }

URL-адрес как: ssl://url-to-our-mqtt

Может кто-нибудь помочь, пожалуйста?

1 Ответ

0 голосов
/ 11 июня 2019

Я тоже столкнулся с той же проблемой.Проблема для меня заключалась в том, что я использовал

 plugins: [
   new webpack.NormalModuleReplacementPlugin(/^mqtt$/, "mqtt/dist/mqtt.js"),
 ],

в файле webpack.config.js, чтобы исправить ошибку shebang, которая приходит с mqtt.js, так как это инструмент CLI.Тогда вместо этого я использовал

  {
    test: [
      /node_modules[/\\]mqtt[/\\]mqtt.js/,
      /node_modules[/\\]mqtt[/\\]bin[/\\]sub.js/,
      /node_modules[/\\]mqtt[/\\]bin[/\\]pub.js/,
    ],
    loader: 'shebang-loader'
  },

И моя проблема была исправлена.Используете ли вы также mqtt / dist / mqtt.js вместо mqtt при импорте или если вы делаете что-то похожее на мое, правило загрузчика shebang, которое я разместил выше, может решить вашу проблему.

...