使用webpack为浏览器打包节点应用程序

时间:2017-03-14 20:30:26

标签: javascript node.js laravel-5 webpack mix

所以这可能是天真的,但我可以在浏览器中运行仅节点风格的应用程序吗?我看到了前端的东西。我已经看到了后端的东西。我想在浏览器中运行https://github.com/lapwinglabs/x-ray并做一些快速和肮脏的事情(这段代码可能不完美)

$(document).ready(function() {
  var phantom = require('x-ray-phantom');
  var Xray = require('x-ray');

  var x = Xray()
    .driver(phantom());

  x('http://google.com', 'body')(function(err, str) {
    $( "body" ).replaceWith( "str" );
  });
});

在没有iframe的情况下进行整个网站传递。我的目的是以全球的方式重新编写内部公司资产的CSS。我只能传递一个网址,页面就会显示出来。如果我有自定义css,那么它将是活动的。我仍然需要努力工作,但在这个时刻我并不担心。

过去我曾使用过X光片,它就像一个魅力。在这种情况下,虽然我喜欢Laravel,并希望能够支持我的应用程序。

最新的Laravel有一个" mix",一个网络包前端。它适用于前端资产。如果我尝试使用x-ray进行网络包装,我会遇到一系列问题:

  

找不到模块:错误:无法解析yadayadayada

所以你可以设置这样的导出:

module.exports.node = {
    fs: 'empty',
    net: 'empty',
    tls: 'empty'
};

虽然修复了模块错误,但我觉得我需要这些东西。在浏览器中我得到:

  

未捕获错误:无法找到模块" child_process"

我觉得这样的事情不应该奏效,但我希望我错了。

1 个答案:

答案 0 :(得分:0)

简单的答案是:您不能在浏览器中使用netnode之类的Node内置模块,以及使用它们的模块。

您可以像使用fs选项一样清空它们,但依赖它们的模块出于某种原因使用它们并且您会破坏它们,除非您确切知道使用构建的部分-in模块,不会在你的应用程序中结束,或者至少你没有使用它。

在您的情况下,首先它抱怨child_process,这在浏览器中显然没有意义,因为您无法访问文件系统。然后它抱怨BEGIN DELETE FROM table_X WHERE id IN ( select person_id from table_1 where termination is true ); DELETE FROM table_Y WHERE id IN ( select person_id from table_1 where termination is true ); END; / ,所以在模块中它产生进程的某个地方,但你也不能在浏览器中这样做,并且清空它很可能会破坏模块的功能,所以你需要寻找另一个可以在浏览器中使用的模块。