节点串口作为的WebPack外部模块 - 模块未找到(Node-serial port as ext

2019-09-30 17:54发布

我试图让节点用的serialport电子和的WebPack工作。

我进口serialports外部模块 :

# webpack.config.js

externals: {
  serialport: "serialport"
}

这是在我的应用程序的代码:

// read NMEA data from serial port
const SerialPort = require('serialport');
console.log(SerialPort.list());

const Readline = SerialPort.parsers.Readline;
const port = new SerialPort('/dev/tty.Redmi-ShareGPS', { baudRate: 4800 });
const parser = port.pipe(new Readline({ delimiter: '\r\n' }));



// Open errors will be emitted as an error event
port.on('error', function(err) {
  console.log(err.message);
})

// send NMEA data to GPS.js
parser.on('data', function(data) {
  // gps.update(data);
});

麻烦的是在第一行: const SerialPort = require('serialport');

的WebPack编译一切都没有错误,但我有一个浏览器控制台错误:

Uncaught ReferenceError: serialport is not defined
    at Object.<anonymous> (bundle.js:65651)
    at __webpack_require__ (bundle.js:20)
    at Object.<anonymous> (bundle.js:65630)
    at __webpack_require__ (bundle.js:20)
    at Object.<anonymous> (bundle.js:31520)
    at __webpack_require__ (bundle.js:20)
    at Object.<anonymous> (bundle.js:25595)
    at __webpack_require__ (bundle.js:20)
    at _ol_ (bundle.js:63)
    at bundle.js:66

这产生的WebPack在bundle.js这个来历:

/* 315 */
/***/ (function(module, exports, __webpack_require__) {

// read NMEA data from serial port
const SerialPort = __webpack_require__(316);
console.log(serialport.list());

const Readline = SerialPort.parsers.Readline;
const port = new SerialPort('/dev/tty.Redmi-ShareGPS', { baudRate: 4800 });
const parser = port.pipe(new Readline({ delimiter: '\r\n' }));

// Open errors will be emitted as an error event
port.on('error', function (err) {
  console.log(err.message);
});

// send NMEA data to GPS.js
parser.on('data', function (data) {
  // gps.update(data);
});

/***/ }),
/* 316 */
/***/ (function(module, exports) {

module.exports = serialport;

/***/ })
/******/ ]);

误差线是完全module.exports = serialport;

根据对外部对象的WebPack文档 ,我想我莫名其妙地需要包括的SerialPort为全局变量,但例子是jQuery的是一个js文件,是的serialport节点模块。

如何使它工作?

Answer 1:

几个小时的挫折后,我感动

const SerialPort = require('serialport');

从中应该通过的WebPack捆绑到index.html的JavaScript文件:

<script>
  const SerialPort = require('serialport');
</script>
<script src="dist/bundle.js"></script>

的SerialPort是目前公认。

此外,它看起来像的We​​bPack-DEV-服务器不与电子的serialport和工作得很好。 我要推出完整的电子应用。



Answer 2:

尝试remote

您可能还需要使用尝试remote

const SerialPort = require( "electron" ).remote.require( "serialport" );


文章来源: Node-serial port as external module in webpack - module not found