我正在尝试建立
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') );