首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在liquidfun.js中使用nw.js

在liquidfun.js中使用nw.js
EN

Stack Overflow用户
提问于 2016-01-12 13:46:32
回答 1查看 229关注 0票数 0

我正在编写一个应用程序,它使用两个似乎相互冲突的组件。

liquidfun.js和node.js/NW.js

我正在用液体模拟流体。我在NW.js中使用NW.js()设置窗口缩放级别。每一种都不起作用。

以下是我同时运行这两个程序时的错误。

代码语言:javascript
复制
Uncaught ReferenceError: module is not defined      liquidfun.js:3
Uncaught TypeError: undefined is not a function      liquidfun.js:1443

我怀疑节点具有一些函数属性,它可以将名称“模块”与液态库中的某个东西共享。

如何防止NW.js处理液态脚本?

其他信息:

页面是从同一台计算机上的xampp服务器提供的,所以我必须使用“节点-远程”来设置缩放级别。

编辑:

由nw.js加载的HTML

代码语言:javascript
复制
<!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

代码语言:javascript
复制
{

    "main": "main.html",
    "name": "Fun Editor",
    "node-remote" : "127.0.0.1"

}

其结果是原文章中提到的模块错误。当节点-遥控器被删除,液体乐趣报告成功加载。如果没有节点远程,还有另一个错误。

代码语言:javascript
复制
UncaughtReferenceError: require is not defined    (program):1 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-12 16:54:10

问题是,液化乐趣首先评估它正在运行的环境,并且由于定义了require,它希望moduleexports也是如此。作为nw.js的一个特殊性,这是不正确的。因此,您需要像这样require您的库:

代码语言:javascript
复制
<script>
    var lf      = require("./libs/liquidfun.js");
    var world   = null;
    var gravity = new lf.b2Vec2();

    function init(){
        world = new lf.b2World(gravity);
    }
</script>

现在,虽然在几乎所有情况下都可以这样做,但在这种情况下,这一点也不会有帮助,因为液化乐趣似乎并不是导出必要的类(我不熟悉这个库,因此可能会有这样的方法)。在this answer之后,只需在库的末尾添加必要的导出:

代码语言:javascript
复制
module.exports = {
    b2Vec2         : b2Vec2,
    b2BodyDef      : b2BodyDef,
    b2PolygonShape : b2PolygonShape,
    b2FixtureDef   : b2FixtureDef,
    b2World        : b2World,
    b2_dynamicBody : b2_dynamicBody,
    setWorld       : function(_world){ world=_world;   }
};

另一种方法(因为您无论如何都需要编辑liquidfun.js )是欺骗库在常规web模式下运行。您可以通过替换第一行中的此位来完成这一任务:

代码语言:javascript
复制
...process==="object"&&typeof require==="function";...

在这方面:

代码语言:javascript
复制
...process==="object"&&false;...

然后,您可以按照预期使用该库:

代码语言:javascript
复制
<script src="libs/liquidfun.js"></script>
<script>
    var world   = null;
    var gravity = new b2Vec2();
    function init(){
        world = new b2World(gravity);
    }
</script>

不用说,这两种解决方案都有点“烦琐”,也不太理想。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34745386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档