我有 3 个文件,一个index.html
,一个Learner.js
,和一个bot.js
。现在,bot.js
是一个常规的js文件,我用<script>
标签加载到html文件中,Learner.js
是一个NodeJS文件。我拥有此文件的唯一原因是因为我想使用神经网络库,但它仅适用于 NodeJS,不适用于常规 javascript,那么我将如何准确引用Learner.js
中存在的任何函数、变量等bot.js
,我应该使用 <script>
标签加载文件,或者最好的方法是什么?
答案是它(可能)很复杂。
有些事情node.js可以做浏览器JavaScript不能做的事情(比如有文件系统访问权限),有些事情是浏览器不做的(例如Buffer API,模块系统)。显然,后者可以通过库带到浏览器中,但在前者上,您就不走运了。
所以问题是,该库使用哪些特定于节点的东西?如果只是require
使用 webpack/browserify 或 babel/rollup 插件。但是你将不得不梳理该库,看看它实际使用了什么,以及它是否存在于浏览器中。
您可以简单地添加它:
<script type="text/javascript" src="Learner.js"></script>
<script type="text/javascript" src="bot.js"></script>
但是,如果你的Learner.js
javascript文件使用一些本机node.js
引擎函数或只是require()
调用,它将不起作用。
在这种情况下,请考虑尝试使用Browserify
或类似的工具,以允许运行nodejs特定的东西进入浏览器。
所有这些工具都有局限性,并非所有代码都可以在浏览器端执行。
当不可能时,您必须在nodejs中实现Web服务服务器(例如使用REST api,基于RPC模式的JSON,...)以允许执行代码并在浏览器中获取结果。
只要两者都是 JavaScript 并且具有具有全局范围的变量,就可以在bot.js
中使用 Learner.js
中的变量Learner.js
在bot.js
之前加载
<script type="text/javascript" src="Learner.js"></script>
<script type="text/javascript" src="bot.js"></script>
还可以使用 window
或(在全局范围内)this
属性来获得相同的效果。
但当你使用node时,你必须确保你也在运行节点服务器,获取输出的最佳方法是通过使用一些API
发送json对象,并在bot.js
中获得json
响应