我的 webpack 捆绑脚本中未定义的节点模块
Node modules undefined in my webpack bundled script
我正在制作一个基于 jped 图片的网络应用程序,它可以识别字符并将其呈现在用户的交互式界面中 - 这包括一些异步代码。有 4 个 js 脚本文件,它们都需要 npm 模块和一个 html 视图。
为了测试应用程序客户端,我决定将脚本捆绑在一起。
它显示以下错误消息:
Uncaught ReferenceError: require is not defined
我的 npm 模块列表,其代码 returns 在 运行 时出现此错误:
- isexe: 需要 fs
- 摧毁:fs
- tesseractocr: child_process, fs
我试过:
- browserify 我的脚本打包成一个包,但我读到它不适用于异步函数;
- webpack 将脚本打包成一个包,但是像 fs 和 child_process 这样的节点模块正在返回 'undefined' ;
- 添加特定的 Node 模块,child-process-ctor,以强制 child_process 包含
唉,同样的错误提示。
问题:
- 捆绑脚本是正确的方法吗?
- 是webpack没有转译fs的问题child_processcorrectly?
- 我应该考虑哪些可能的解决方案?
谢谢大家 :-) 这是我关于 SO 的第一个问题——非常欢迎任何反馈!
PS:这对于 可能是多余的。
好的,这个答案是我评论的跟进,更直接地回答了问题。然而,在这里我会比可能需要的更详细,但它会彻底回答你的问题。此外,它具有教育意义,一旦你真正开始深入研究它,我会说它非常有趣 :D
从头开始。随着早期互联网变得更加先进,对 "front end logic" 类型的需求也在增加,而 Netscape 对这一需求的回应是在创纪录的时间内诞生了一种具有竞争力的尖端编程语言。
我所说的创纪录时间是指 10 天,而所说的竞争性是指几乎没有功能。
没错Javascript出生在10天(literally)。正如您所想象的那样,它是一种非常糟糕的语言,但它运行良好以至于人们开始使用它。
因为它是 Internet 的编程语言,而且由于 Internet 的发展速度如此之快,已经有足够多的人开始使用它,所以删除它的想法变得可怕。
如果您更改它,您将破坏与数百万网站的向后兼容性。另一个想法是保留它,但也实施新标准。然而,很难证明这一点是合理的,因为 javascript 已经花了很多工作来维护,维护多个标准将是一场噩梦(咳... flash 咳)。
Javascipt 对于 "new" 程序员来说很容易学习,但问题是 javascript 在 php、ruby、mySql、Mongo、Css、Html 都在各自的王国中作为统治国王进行统治。
所以someone认为将javascript移动到服务器是个好主意,因此node.js诞生了。
然而,javascript 要在服务器上表示任何内容,它必须能够执行您不希望它在浏览器中执行的操作。例如,扫描您的硬盘并编辑您的文件。
如果您访问的每个网站都可以开始扫描并上传您系统中的所有内容well....
但是,如果您的服务器软件无法编辑或读取文件,您需要它 well....
你懂的。它是同一种语言,但由于安全问题 node.js 有一些差异。主要是允许使用的模块。
现在是有趣的部分。你能在浏览器中 运行 node.js 客户端吗?技术上是的。事实上,既然我们正在倾倒整个 operating systems into a subset of javascript called asm.js,那么 javascript 确实没有什么是用足够的处理能力做不到的。
然而,即使您将整个 node.js 引擎(基本上是 chrome 的精简版)转储到 asm.js 中,您仍然会受到相同的安全限制"Host" 浏览器,因此您的模块只能 运行 在浏览器提供的沙箱中。
因此,从技术上讲,它只是另一个浏览器中的一个浏览器 运行,速度只有一半,但具有相同的安全限制。
我会推荐这样做吗?当然不是。
这是人们以前没有尝试过的东西吗?当然不是。
所以我希望这有助于回答你的问题。
我正在制作一个基于 jped 图片的网络应用程序,它可以识别字符并将其呈现在用户的交互式界面中 - 这包括一些异步代码。有 4 个 js 脚本文件,它们都需要 npm 模块和一个 html 视图。
为了测试应用程序客户端,我决定将脚本捆绑在一起。 它显示以下错误消息:
Uncaught ReferenceError: require is not defined
我的 npm 模块列表,其代码 returns 在 运行 时出现此错误:
- isexe: 需要 fs
- 摧毁:fs
- tesseractocr: child_process, fs
我试过:
- browserify 我的脚本打包成一个包,但我读到它不适用于异步函数;
- webpack 将脚本打包成一个包,但是像 fs 和 child_process 这样的节点模块正在返回 'undefined' ;
- 添加特定的 Node 模块,child-process-ctor,以强制 child_process 包含
唉,同样的错误提示。
问题:
- 捆绑脚本是正确的方法吗?
- 是webpack没有转译fs的问题child_processcorrectly?
- 我应该考虑哪些可能的解决方案?
谢谢大家 :-) 这是我关于 SO 的第一个问题——非常欢迎任何反馈!
PS:这对于
好的,这个答案是我评论的跟进,更直接地回答了问题。然而,在这里我会比可能需要的更详细,但它会彻底回答你的问题。此外,它具有教育意义,一旦你真正开始深入研究它,我会说它非常有趣 :D
从头开始。随着早期互联网变得更加先进,对 "front end logic" 类型的需求也在增加,而 Netscape 对这一需求的回应是在创纪录的时间内诞生了一种具有竞争力的尖端编程语言。
我所说的创纪录时间是指 10 天,而所说的竞争性是指几乎没有功能。
没错Javascript出生在10天(literally)。正如您所想象的那样,它是一种非常糟糕的语言,但它运行良好以至于人们开始使用它。
因为它是 Internet 的编程语言,而且由于 Internet 的发展速度如此之快,已经有足够多的人开始使用它,所以删除它的想法变得可怕。
如果您更改它,您将破坏与数百万网站的向后兼容性。另一个想法是保留它,但也实施新标准。然而,很难证明这一点是合理的,因为 javascript 已经花了很多工作来维护,维护多个标准将是一场噩梦(咳... flash 咳)。
Javascipt 对于 "new" 程序员来说很容易学习,但问题是 javascript 在 php、ruby、mySql、Mongo、Css、Html 都在各自的王国中作为统治国王进行统治。
所以someone认为将javascript移动到服务器是个好主意,因此node.js诞生了。
然而,javascript 要在服务器上表示任何内容,它必须能够执行您不希望它在浏览器中执行的操作。例如,扫描您的硬盘并编辑您的文件。
如果您访问的每个网站都可以开始扫描并上传您系统中的所有内容well....
但是,如果您的服务器软件无法编辑或读取文件,您需要它 well....
你懂的。它是同一种语言,但由于安全问题 node.js 有一些差异。主要是允许使用的模块。
现在是有趣的部分。你能在浏览器中 运行 node.js 客户端吗?技术上是的。事实上,既然我们正在倾倒整个 operating systems into a subset of javascript called asm.js,那么 javascript 确实没有什么是用足够的处理能力做不到的。
然而,即使您将整个 node.js 引擎(基本上是 chrome 的精简版)转储到 asm.js 中,您仍然会受到相同的安全限制"Host" 浏览器,因此您的模块只能 运行 在浏览器提供的沙箱中。
因此,从技术上讲,它只是另一个浏览器中的一个浏览器 运行,速度只有一半,但具有相同的安全限制。
我会推荐这样做吗?当然不是。
这是人们以前没有尝试过的东西吗?当然不是。
所以我希望这有助于回答你的问题。