node.js – 如何使用node-webkit中的webpack将节点模块与本机插件捆绑在一起?

我正在尝试建立 pty.js用于 node-webkit(即nw.js)v0.8.6:

mkdir testapp && cd testapp
nvm use 0.10.36
npm install -g nw-gyp
npm install pty.js
cd node_modules/pty.js

# Build the native addon for node-webkit v0.8.6:
nw-gyp configure --target=0.8.6 && nw-gyp build

The output ends with gyp info ok.

使用简单的app.js和index.html,应用程序将以no errors in the JavaScript console启动:

<!-- index.html -->

<!DOCTYPE html>
<html>
  <head>
    <title>Hello World!</title>
  </head>
  <body>
    <h1>Hello World!</h1>
    <script src="app.js"></script>
  </body>
</html>
// app.js

var pty = require('pty.js');

var term = pty.spawn('bash',[],{
  name: 'xterm-color',cols: 80,rows: 30,cwd: process.env.HOME,env: process.env
});

term.on('data',function(data) {
  console.log(data);
});

term.write('ls\r');
term.resize(100,40);
term.write('ls /\r');

console.log(term.process);

的package.json:

{
    "name": "testapp","main": "index.html"
}

我希望通过将app.js捆绑到bundle.js来支持通过webpack进行的ES6和JSX编译:

<!-- index.html -->

<!DOCTYPE html>
<html>
  <head>
    <title>Hello World!</title>
  </head>
  <body>
    <h1>Hello World!</h1>
    <script src="bundle.js"></script>
  </body>
</html>

捆绑app.js:

npm install -g webpack
webpack app.js bundle.js --target="node-webkit"  # This fails

但webpack因此错误而失败:

Hash: 6c3cd8b4ec249ab8fd05
Version: webpack 1.6.0
Time: 76ms
    Asset   Size  Chunks             Chunk Names
bundle.js  21244       0  [emitted]  main
   [0] ./app.js 311 {0} [built]
    + 10 hidden modules

ERROR in ./~/pty.js/build/Release/pty.node
Module parse Failed: /Users/Spencer/Desktop/testapp/node_modules/pty.js/build/Release/pty.node Line 1: Unexpected token ILLEgal
You may need an appropriate loader to handle this file type.
(Source code omitted for this binary file)
 @ ./~/pty.js/lib/pty.js 10:10-46

在需要本机二进制文件(如pty.node)时是否需要使用加载程序? webpack documentation表示“node-webkit”目标“支持native node.js模块”;也许它还不支持原生插件

解决方法

虽然我无法使webpack工作,但我能够通过使用 require('babel/register')来使ES6 JSX工作:

<!-- index.html -->

<!DOCTYPE html>
<html>
<head>
  <title>Hello World!</title>
</head>
<body>
  <main></main>
  <script>
    require('babel/register');
    require('./js/app');
  </script>
</body>
</html>
// ./js/app.js

import React from 'react';

React.render(
  <span>Hello World!</span>,document.querySelector('main')
);

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...