node-serialport不适用于Electron

时间:2015-09-12 09:14:48

标签: node.js arduino serial-port node-gyp electron

我的任务是构建一个HTML5桌面应用程序,它与串口一起使用,因为我在COM端口的另一端有一个arduino。

我同时安装了electron-prebuiltserialport个包(我在package.json中指定了它们)。 在我的主网页中,我添加了main.js,在那里我尝试了serialport包,但是我收到了以下错误:

  

未捕获错误:找不到模块   'd:\项目\ Arduino的\ HTMLPresentation \ node_modules \的serialport \建立\的serialport \ v1.7.4 \发布\节点-V45-Win32的64 \ serialport.node'

我已经阅读了一些关于该问题的QA主题(一些带有node-gyp的abracadabras),但注意到我的工作:在Windows 8.1和Ubuntu 15.04上。我不知道如何为电子采用serialport包。

3 个答案:

答案 0 :(得分:1)

使用Electron-Rebuild:此可执行文件针对您的Electron项目正在使用的io.js版本重建本机io.js模块。这允许您在Electron应用程序中使用本机io.js模块,而不会使您的系统版本的io.js完全匹配。

npm install --save-dev electron-rebuild

# Every time you run "npm install", run this
./node_modules/.bin/electron-rebuild

# On Windows if you have trouble, try:
.\node_modules\.bin\electron-rebuild.cmd

答案 1 :(得分:1)

我的环境:

Vue.js: 2.6.10
Electron: 2.0.18
Node: 8.9.3
Platform: linux

如果您将Eletron与Vue.js结合使用,则需要重建串口模块,如下所示:

npm install electron-rebuild --save-dev

在此之后,您可以在package.json>“脚本”部分中添加另一行:

"rebuild": "electron-rebuild -f -w serialport"

您可以使用终端命令重建模块

npm run rebuild

现在应该导入串行端口模块,并且可以按预期工作。祝你好运!

答案 2 :(得分:0)

这就是您要解决的方式

  

通过在具有管理员权限的Powershell中运行此工具,在计算机中安装Windows构建工具

 npm install --global --production windows-build-tools 
  

或npm --add-python-to-path ='true'-调试安装--global Windows-build-tools

 setx PYTHON "%USERPROFILE%\.windows-build-tools/python27/python.exe"

 set PYTHON
  

set PYTHON可帮助您检查其设置是否正确。

     

这还不足以在您的项目文件中全局安装电子重建

 npm install -g electron-prebuilt  
 npm install --save serialport
  

我们必须重建串行端口才能使用电子。为此,我们需要> install electronic-rebuild:

 npm install --save-dev electron-rebuild  
  

最后一步是再次在应用程序的根>目录中运行电子重建:

 ./node_modules/.bin/electron-rebuild
  

导入并在您的电子战项目中使用

<script>     
  const sp = require('serialport')
  export default {
    name: 'landing-page',
    methods: {},
    created () {
      sp.list(function (error, ports) {
        if (error) {
          console.log(error)
        } else {
          console.log(ports)
        }
      })
    }
  }
</script>