Ruby on rails 是否可以使用Webpack捆绑节点库,以便生成的代码可以与execjs一起使用?

Ruby on rails 是否可以使用Webpack捆绑节点库,以便生成的代码可以与execjs一起使用?,ruby-on-rails,node.js,reactjs,webpack,isomorphic-javascript,Ruby On Rails,Node.js,Reactjs,Webpack,Isomorphic Javascript,我的服务器端是rails,我正在尝试使用react和relay进行同构渲染。我找到的唯一方法是使用npm模块同构继电器。显然,它正在使用节点获取,而节点获取又在使用“http”库。是否可以使用webpack(或其他工具)创建一个包含所有代码的包,然后使用execjs(节点作为引擎)运行它?当我使用Node作为目标网页包时,将“http”作为外部要求,假设Node将加载它,所以execjs无法运行它 详情: 我的源文件是单行的 require('isomorphic-fetch'); 使用网页包

我的服务器端是rails,我正在尝试使用react和relay进行同构渲染。我找到的唯一方法是使用npm模块同构继电器。显然,它正在使用节点获取,而节点获取又在使用“http”库。是否可以使用webpack(或其他工具)创建一个包含所有代码的包,然后使用execjs(节点作为引擎)运行它?当我使用Node作为目标网页包时,将“http”作为外部要求,假设Node将加载它,所以execjs无法运行它

详情:

我的源文件是单行的

require('isomorphic-fetch');
使用网页包配置:

  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尝试执行它时(以Node为引擎),它会得到错误:

Encountered error: "TypeError: require is not a function"
如果我按如下方式更改网页包配置:

//  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”,假设它是针对浏览器而不是后端的。在同构fetch的package.json中

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

  "main": "fetch-npm-node.js",
fetch-npm-browserify.js似乎导致了“self”问题,而fetch-npm-node.js会试图要求所有这些节点库,如url、http等,因此无法与execjs一起使用


我想我需要某种方法将节点用作目标,但不知何故,要使webpack在捆绑包中包含所有这些节点库(http等),以便execjs可以执行它。

不,这是不可能的
node fetch
由nodejs标准库(如
http
url
zlib
等)生成,并且
execjs
无法访问任何nodejs模块。

您是否尝试过使用?@bolav问题是这是服务器端代码,而不是浏览器代码。当我使用browserify时,我得到一个错误,说“self”没有定义。当我深入研究这个包时,我发现同构中继需要同构获取,而这反过来又需要错误版本的获取(当目标为浏览器时)。当我使用webpack时,它确实包含了服务器库、节点获取,但是我得到了上面的问题…如果您包含一些代码,在您演示问题的地方,可能更容易帮助您。@bolav不确定要包含哪些代码。除非我使用节点本身(而不是通过execjs使用节点),否则即使是只需要同构中继(或同构获取)的一行代码也无法工作。如果您使用完整的可重用代码包含您尝试过的内容以及结果,那么这将更有用,也更容易为您提供帮助。现在我需要找出一个测试用例,运行它,看看错误是什么,然后猜测这是否与您遇到的问题相同。即使您认为重现此问题很容易,但如果您包含信息,则会有所帮助。