是否有可能使用Webpack绑定节点库,所以导致的代码将与execjs工作?

我的服务器端是轨道,我试图做同构呈现与反应和中继。 我发现的唯一方法是使用npm模块同构中继。 显然它使用节点获取,而这又是使用“http”库。 是否有可能使用webpack(或其他工具)来创build包含所有代码的单个包,然后使用execjs(以Node作为引擎)运行它? 当我使用节点作为目标webpack叶'http'作为外部需求,假设节点将加载它,所以execjs不能运行它…

细节:

我的源文件是单行

require('isomorphic-fetch'); 

使用webpackconfiguration:

  target: 'node', output: { path: path.join(__dirname, '..', 'public', 'webpack'), publicPath: '/webpack/', filename: 'server-bundle.js', libraryTarget: 'commonjs2' }, 

结果包包括各种要求,如下所示:

 /* 3 */ /***/ function(module, exports) { module.exports = require("url"); /***/ }, /* 4 */ /***/ function(module, exports) { module.exports = require("http"); /***/ }, /* 5 */ /***/ function(module, exports) { module.exports = require("https"); /***/ }, 

它可以和Node一起工作(显然没有做任何事情),但是当execjs试图执行它(以节点作为引擎)时,它会得到错误:

 Encountered error: "TypeError: require is not a function" 

如果我改变webpackconfiguration如下:

 // target: 'node', output: { path: path.join(__dirname, '..', 'public', 'webpack'), publicPath: '/webpack/', filename: 'server-bundle.js', // libraryTarget: 'commonjs2' }, 

生成的代码确实运行与execjs,但然后我得到以下错误:

 Encountered error: "ReferenceError: self is not defined" 

花了很多时间后,我认为这是因为它包含错误版本的'fetch',假设它是针对浏览器的,而不是针对后端的。 在isomorphic-fetch的package.json中有

  "browser": "fetch-npm-browserify.js", 

并且:

  "main": "fetch-npm-node.js", 

看起来像fetch-npm-browserify.js导致了“自我”问题,而fetch-npm-node.js会试图要求像url,http等所有的节点库,因此不能用于execjs。

我想我需要一些方法来使用节点作为目标,但不知何故使webpack包含所有这些节点库(http等),所以execjs可以执行它。

不,这是不可能的。 node-fetch是由nodejs标准库(如httpurlzlib等)制作的, execjs无法到达任何nodejs模块。