在 nw.js 中使用 liquidfun.js
Using liquidfun.js within nw.js
我正在编写一个应用程序,它使用两个似乎相互冲突的组件。
liquidfun.js 和 node.js/NW.js
我正在使用 liquidfun 进行流体模拟。我在 NW.js 中使用 window.get() 来设置 window 缩放级别。每个都可以单独工作。
这是我同时 运行 时的错误。
Uncaught ReferenceError: module is not defined liquidfun.js:3
Uncaught TypeError: undefined is not a function liquidfun.js:1443
我怀疑节点有一些函数 属性 与 liquidfun 库中的某些东西共享名称 "module"。
如何防止 NW.js 处理 liquidfun 脚本?
附加信息:
页面由同一台计算机上的 xampp 服务器提供,因此我必须使用 "node-remote" 来设置缩放级别。
编辑:
HTML 由 nw.js
加载
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>html5canvas</title>
<script src="libs/liquidfun.js"></script>
<script>
var gui = require('nw.gui');
win = gui.Window.get();
win.zoomLevel =[-10];
</script>
</head>
<body onload="init();" style="background-color:#D4D4D4">
<canvas id="canvas" width="2160" height="3840" style="background-color:#B1D1B1"></canvas>
</body>
<script>
var world = null;
var gravity = new b2Vec2();
function init(){
world = new b2World(gravity);
}
</script>
NW.js Package.json
{
"main": "main.html",
"name": "Fun Editor",
"node-remote" : "127.0.0.1"
}
这样的结果就是原post中提到的模块错误。
当移除节点远程时,liquid fun 报告加载成功。没有 node-remote
还有一个错误
UncaughtReferenceError: require is not defined (program):1
问题是 liquidfun 首先评估它所在的 运行 环境,并且由于定义了 require
,它期望 module
和 exports
也是如此。作为 nw.js 的特殊性,这不是真的。所以你需要像这样 require
你的图书馆:
<script>
var lf = require("./libs/liquidfun.js");
var world = null;
var gravity = new lf.b2Vec2();
function init(){
world = new lf.b2World(gravity);
}
</script>
现在,虽然这对几乎所有情况都适用,但在这种情况下它本身无济于事,因为 liquidfun 似乎没有导出必要的 类(我对此不熟悉图书馆所以可能有这样做的方法)。在 this answer 之后,您可以在库的末尾添加必要的导出:
module.exports = {
b2Vec2 : b2Vec2,
b2BodyDef : b2BodyDef,
b2PolygonShape : b2PolygonShape,
b2FixtureDef : b2FixtureDef,
b2World : b2World,
b2_dynamicBody : b2_dynamicBody,
setWorld : function(_world){ world=_world; }
};
解决此问题的另一种方法(因为您无论如何都需要编辑 liquidfun.js)是在常规网络模式下将库诱骗到 运行。您可以通过替换第一行中的这个位来完成此操作:
...process==="object"&&typeof require==="function";...
有了这个:
...process==="object"&&false;...
然后您可以按预期使用该库:
<script src="libs/liquidfun.js"></script>
<script>
var world = null;
var gravity = new b2Vec2();
function init(){
world = new b2World(gravity);
}
</script>
不用说,这两种解决方案都有点 "hacky" 并且不是很理想。
我正在编写一个应用程序,它使用两个似乎相互冲突的组件。
liquidfun.js 和 node.js/NW.js
我正在使用 liquidfun 进行流体模拟。我在 NW.js 中使用 window.get() 来设置 window 缩放级别。每个都可以单独工作。
这是我同时 运行 时的错误。
Uncaught ReferenceError: module is not defined liquidfun.js:3
Uncaught TypeError: undefined is not a function liquidfun.js:1443
我怀疑节点有一些函数 属性 与 liquidfun 库中的某些东西共享名称 "module"。
如何防止 NW.js 处理 liquidfun 脚本?
附加信息:
页面由同一台计算机上的 xampp 服务器提供,因此我必须使用 "node-remote" 来设置缩放级别。
编辑:
HTML 由 nw.js
加载<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>html5canvas</title>
<script src="libs/liquidfun.js"></script>
<script>
var gui = require('nw.gui');
win = gui.Window.get();
win.zoomLevel =[-10];
</script>
</head>
<body onload="init();" style="background-color:#D4D4D4">
<canvas id="canvas" width="2160" height="3840" style="background-color:#B1D1B1"></canvas>
</body>
<script>
var world = null;
var gravity = new b2Vec2();
function init(){
world = new b2World(gravity);
}
</script>
NW.js Package.json
{
"main": "main.html",
"name": "Fun Editor",
"node-remote" : "127.0.0.1"
}
这样的结果就是原post中提到的模块错误。 当移除节点远程时,liquid fun 报告加载成功。没有 node-remote
还有一个错误UncaughtReferenceError: require is not defined (program):1
问题是 liquidfun 首先评估它所在的 运行 环境,并且由于定义了 require
,它期望 module
和 exports
也是如此。作为 nw.js 的特殊性,这不是真的。所以你需要像这样 require
你的图书馆:
<script>
var lf = require("./libs/liquidfun.js");
var world = null;
var gravity = new lf.b2Vec2();
function init(){
world = new lf.b2World(gravity);
}
</script>
现在,虽然这对几乎所有情况都适用,但在这种情况下它本身无济于事,因为 liquidfun 似乎没有导出必要的 类(我对此不熟悉图书馆所以可能有这样做的方法)。在 this answer 之后,您可以在库的末尾添加必要的导出:
module.exports = {
b2Vec2 : b2Vec2,
b2BodyDef : b2BodyDef,
b2PolygonShape : b2PolygonShape,
b2FixtureDef : b2FixtureDef,
b2World : b2World,
b2_dynamicBody : b2_dynamicBody,
setWorld : function(_world){ world=_world; }
};
解决此问题的另一种方法(因为您无论如何都需要编辑 liquidfun.js)是在常规网络模式下将库诱骗到 运行。您可以通过替换第一行中的这个位来完成此操作:
...process==="object"&&typeof require==="function";...
有了这个:
...process==="object"&&false;...
然后您可以按预期使用该库:
<script src="libs/liquidfun.js"></script>
<script>
var world = null;
var gravity = new b2Vec2();
function init(){
world = new b2World(gravity);
}
</script>
不用说,这两种解决方案都有点 "hacky" 并且不是很理想。