Solace nodejs api 与 Webpack 的集成

Solace nodejs api integration with Webpack

我有一个使用 webpack 构建的 angular2 typescript webapp。我正在尝试将 solclientjs 集成到其中,但出现以下异常

solclientjs-exports.js:34 Uncaught Error: Cannot find module "."
at webpackMissingModule (solclientjs-exports.js:34)
at load (solclientjs-exports.js:34)
at loadProduction (solclientjs-exports.js:44)
at new loader (solclientjs-exports.js:47)
at Object. (solclientjs-exports.js:72)
at webpack_require (bootstrap 79a17da…:52)
at Object. (home.component.ts:8)
at webpack_require (bootstrap 79a17da…:52)
at Object. (app.ts:17)
at webpack_require (bootstrap 79a17da…:52)

能请教一下吗?

错误在solclientjs-exports.js

的第44行
var loadProduction = function() {
    return load("production", "./solclientjs.js");
};

这是 load() 的作用:

var load = function(type, file) {
    if (loaded[type]) return loaded[type];

    loaded[type] = require(file);
    return loaded[type];
};

好像找不到./solclientjs.js。请验证 solclientjs.js 是否存在并且位于正确的位置。

使用 exports-loader 将使您能够使用 Webpack 打包库。

这是使用 exports-loader 后的示例webpack.config.js

const path = require('path');

const solclientjs = path.resolve(__dirname, 'path/to/solclientjs-10.0.0/lib/solclient.js');

module.exports = {
  resolve: {
    alias: {
      solclientjs$: solclientjs
    }
  },
  module: {
    rules: [
      {
        test: require.resolve(solclientjs),
        use: 'exports-loader?window.solace'
      }
    ]
  }
}

有几点需要注意:

  1. 您需要使用浏览器版本而不是Webpack 的节点版本。打包 Node 版本的库以供在浏览器中使用不受支持且无法正常工作。

    • Node 版本使用无法在浏览器上运行的 Node 特定 WebSocket 库
    • Node 版本不包括完整范围的 HTTP 传输。例如,浏览器版本允许您回退到 HTTP Comet 传输。这在 Node 版本中不可用。
    • 浏览器版本包括特定于浏览器的平台代码来制作东西 在特定浏览器上工作得更好; none 这是 存在于 Node 版本中。
  2. 出于兼容性原因,库的浏览器版本是这样发布的 它可以直接包含在文件中的