NW.js坑坑坑

最近想做个跨平台的玩意儿,一直听说 nodejs 大法好,node webkit(现在改名NW.js)跨平台开发炒鸡屌。看了各种介绍和资料,的确不错的样子。于是开工_(:з」∠)_

我需要调用一个第三方的 Dll,之前确认过 nodejs 可以通过 ffi 调用动态链接库,应该不是问题。

装上最新版 nodejs,使用 npm 安装 nw、ffi,期间提示我需要 node-gyp,装上这货还需要 python 2.7 和 VS 2013,要求真多。

在 chromium 的 Console 尝试调用 ffi,第一个问题就来了。如图:

nw1

这是什么鬼?根本没有具体的错误信息。难道是我编译的姿势不对?重新翻 node-gyp 的说明,发现还需要安装 windows SDK,以及在 64 位系统可能还需要打一个什么补丁。

照做之后在重新编译 ffi 的时候又报错,找不到 ammintrin.h,搜索之后发现 VS 打某个补丁就会丢失这个玩意儿,找到之后加回去。继续编译……

又抛出一大坨奇奇怪怪的错误,再滚回 node-gyp 发现这句话“If the install fails, try uninstalling any C++ 2010 x64&x86 Redistributable that you have installed first”。我愚蠢的相信了,卸载的时候提示 QQ 进程占用无法卸载,杀了 QQ 卸载完发现连 QQ 都打不开,能不能别这么坑(╯—﹏—)╯( ┷━━━┷

重新装上,继续编译,又报这个神奇的错误:

nw2

jpg 有点糊,路径里文件夹是 V110,VS 2013应该是V120,怎么会去找 VS 2012 的路径?此时系统已经安装、卸载一大坨补丁,估计是环境乱作一团了。

无奈只好重装系统重新来_(:з」∠)_

这次重新看 NW.js 的版本说明里有一句 based off of IO.js v1.2.0,才恍然大悟也许需要用对应的 IO.js 版本才行。

先不着急捣鼓 NW,用 IO.js 确认 ffi 调用 Dll 工作正常,感觉这次有戏,继续安装 NW。结果……

nw3

嗯?版本号?这时候才想明白,NW.js 本身内置了 IO.js,所以大概需要用对应版本的 IO.js 才行。

用相同版本的 IO.js 再来一次,这次是这样的:

nw1

(╯‵□′)╯︵┻━┻这不是第一张图么?为什么回到原点了!

接着查资料,才知道需要用 nw-gyp 手工编译对应版本的 ffi。

行行行都听你的,继续重编译 ffi,又一次抛我一脸错误。

语法错误不应该啊?再仔细看 nw-gyp 的要求说明,我天真的以为这货就是分叉版的 node-gyp,没想到它分叉早了,要求 VS 2012!!

不想继续装VS2012。彻底放弃_(:з」∠)_

nodejs 是个坑,分叉出 IO.js 之后各个版本号更是乱,像图2里版本号用的是 43/44,完全不知道对应的 nodejs 或者 IO.js 版本。

还是继续老老实实写php吧_(:з」∠)_浪费两天时间。

NW.js坑坑坑 有 17 个评论

  1. itorr

    目测要用这个东西开发,需要翻一遍源码的样子 OAQ!

    1. 小新喵 回复 7IN0SAN9

      我需要开发一个跨平台客户端,win版本需要第三方dll支持,所以必需在win开发

      1. ShiroWhite 回复 小新喵

        表示已经误入Node坑了 呜呜
        入得太深出不来了…
        (((o(*゚▽゚*)o))) php别打我呀

  2. tzrj

    #include
    #include
    using namespace std;
    int cmp(int a,int b)
    {
    if (a==b)return 1;
    if (abs(a-b)==1)return 2;
    if (abs(a-b)>1)return 3;

    }

    int main()
    {
    int a[4]={0},b[4]={0},n,m=1;
    cin>>n;
    for (int i=0;i>a[i]>>b[i];
    }
    int answer[2];
    answer[0]=a[0];
    answer[1]=b[0];
    for (int i=1;i<n;i++)
    {
    if (cmp(answer[1],b[i])==1)
    {
    answer[0]+=a[i];
    }
    else if (cmp(answer[1],b[i]==2))
    {
    answer[0]=a[i]*answer[1]+answer[0]*b[i];
    answer[1]*=b[i];
    }
    else if (cmp(answer[1],b[i])==3)
    {
    answer[1]=answer[1]*b[i];
    answer[0]+=answer[0]*answer[1]+a[i]*b[i];
    int m=1;
    int temp=answer[0]/answer[1];
    for (int j=1;j<=temp;j++)
    {
    if ((answer[1]%j==0)&&(answer[0]%j==0))
    {
    m=j;
    }
    }
    answer[1]=answer[1]/m;
    answer[0]=answer[0]/m;
    }

    }
    m=1;
    for (int j=1;j<=1000;j++)
    {
    if ((answer[1]%j==0)&&(answer[0]%j==0))
    {
    m=j;
    }
    }
    answer[1]/=m;answer[0]/=m;
    if(answer[1]==1){
    cout<<answer[0];
    }else if(answer[1]==answer[0]){
    cout<<'1';
    }else{
    cout<<answer[0]<<'/'<<answer[1];
    }
    return 0;
    }
    新喵 借我放下。。。

  3. Aklis

    跨平台开发 社区不稳 分支多 惹惹惹

  4. Zyzsdy

    NW.js真心好用。
    虽然坑点很多。但是跨平台GUI界从来没有这么大的变革了(上次大概是Qt吧)。
    不管从哪个角度我都是看好的。

回复 itorr 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据