我的webpack捆绑脚本中的节点模块未定义

时间:2018-05-27 13:38:24

标签: javascript node.js webpack browserify

我正在创建一个基于jped图片的Web应用程序,识别字符并在用户的交互式界面中呈现它 - 这包括一些异步代码。有4个js脚本文件,它们都需要npm模块和html视图。

为了测试app客户端,我决定将脚本捆绑在一起。 它显示以下错误消息:

Uncaught ReferenceError: require is not defined

我的npm模块列表,其代码在运行时返回此错误:

我试过了:

  1. browserify我的脚本变成了一个包,但我读到它不能用于异步函数;
  2. webpack将脚本放入一个包中,但像fs和child_process这样的Node模块返回'undefined';
  3. 添加特定的Node模块child-process-ctor,强制child_process加入包含的
  4. 唉,返回相同的错误消息。

    问题:

    1. 以正确的方式捆绑脚本?
    2. webpack不会传输fs和child_process correctly的问题吗?
    3. 我应该考虑哪些可能的解决方案?
    4. 谢谢大家:-)这是关于SO的第一个问题 - 非常欢迎任何反馈!

      PS:Using module "child_process" without Webpack可能会多余。

1 个答案:

答案 0 :(得分:1)

好的,这个答案是对我的评论的跟进,它更直接地回答了这个问题。但是在这里我会详细介绍可能需要的细节,但它会彻底回答你的问题。再加上它很有教育意义,一旦你真正开始深入研究,我会说这很有趣:D

从头开始。随着早期互联网变得越来越先进,对一种“前端逻辑”的需求不断增加,Netscape对这种需求的反应就是在创纪录的时间内诞生了一种竞争激烈的尖端编程语言。

按创纪录的时间我的意思是10天,而竞争力则意味着几乎没有功能。

这是正确的Javascript诞生于10天(literally)。你可以想象它是一种非常糟糕的语言,但它足以让人们开始使用它。

因为它是互联网的编程语言,并且由于互联网增长的速度,足够多的人开始使用它,因此删除它的想法变得可怕。

如果您更改了它,则会破坏与数百万个网站的向后兼容性。另一个想法是保留它,但也实施一个新标准。然而,很难证明这一点,因为javascript已经花费了大量的工作来维持,维持多个标准将是一场噩梦(咳嗽...... flash咳嗽)。

Javascipt对于“新”程序员来说很容易学习,但问题是javascript只有一种语言,在这个世界中,php,ruby,mySql,Mongo,Css,Html都统治着各自王国的统治国王。

所以someone认为将javascript移动到服务器是个好主意,因此node.js就诞生了。

然而,对于javascript来说服务器上的任何内容,它必须能够执行您不希望它在浏览器中执行的操作。例如,扫描硬盘并编辑文件。

如果您访问的每个网站都可以开始扫描并上传系统中的所有内容well....

但是,如果您的服务器软件无法编辑或读取文件,则需要well....

你明白了。它是相同的语言,但由于安全问题,node.js有一些差异。主要是允许使用的模块。

现在为有趣的部分。你可以在浏览器中运行node.js客户端吗?技术上是的。事实上,现在我们将整个operating systems转储到名为asm.js的javascript子集中,实际上没有任何javascript无法处理足够的处理能力。

但是,即使您将整个node.js引擎(基本上是一个精简的chrome版本)转储到asm.js中,您仍然会受到“主机”浏览器的相同安全限制,因此您的模块只能在浏览器提供的沙箱中运行。

因此,从技术上讲,它只是另一个浏览器中的浏览器,以相同的安全限制运行速度的一半。

我建议做什么吗?当然不是。

以前人们还没有尝试过吗?当然不是。

所以我希望这有助于回答你的问题。

相关问题