代码之家  ›  专栏  ›  技术社区  ›  afriedma

Solace nodejs api与Webpack的集成

  •  1
  • afriedma  · 技术社区  · 7 年前

    我有一个angular2 typescript网络应用程序,它是用网页包构建的。我试图将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)
    

    你能建议一下吗?

    2 回复  |  直到 7 年前
        1
  •  2
  •   observer Darrel Miller    5 年前

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

    这是一个样本 webpack.config.js 导出后使用loader。

    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. 对于网页包,您需要使用浏览器版本而不是节点版本。打包库的节点版本以在浏览器中使用不受支持,也不起作用。

      • 节点版本使用特定于节点的WebSocket库,该库在浏览器上不起作用
      • 浏览器版本包括特定于浏览器的平台代码,用于制作东西 在特定浏览器上工作得更好;这些都不是 存在于节点版本中。
    2. 出于兼容性原因,该库的浏览器版本在发货时 它可以直接包含在a<脚本(>);在文件中标记。对于浏览器,强烈建议使用它加载库。可以找到示例 here .

        2
  •  1
  •   observer Darrel Miller    5 年前

    错误位于的第44行 solclientjs-exports.js

    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 存在并且位于正确位置。