anchengjian/vue-nw-seed

想用NW做串口程序但是出现了错误

spiritfire opened this issue · 8 comments

Chinese
你好,我是一名新手,之前使用electron,但是因为electron在我机器上启动极慢,改用nwjs。
我习惯性的在main里面写了串口代码但得到了错误和白屏。
English
Hi, i am a new comer, i use electron in last 3 month but electron got a very slow startup on my I7 computer, even VSCODE startup very slow. So i am about to change to NWJS. I wrote some serialport simple code in main.js, but i got some error as below picture shown..

system: WIN7 64 ULTIMATE

image

代码:

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'

Vue.config.productionTip = false

import SerialPort from 'serialport'
// init serialport
let comport = new SerialPort('com1', {
  baudRate: 19200
}, (err) => {
  if (err) {
    console.log('comport init failed' + err)
    return
  }
  console.log('comport init success')
  comport.write('hello world')
})
// for auto update
import { checkUpdate } from '@/utils/update.js'
checkUpdate()

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  template: '<App/>',
  components: { App }
})

已经使用下面的命令重新编译了serialport
I have already rebuild the serialport using below command

nw-gyp rebuild --target=0.14.7 --arch=x64

请问我该怎么做?问题可能有点初级,请原谅。
what should i do to correct this? maybe the question is too low level, please help.

看起来报错是在 serialport 的代码中的 require 用了动态表达式。

首先需要检查,你是否加了 node-loader 在 webpack 的配置中。

然后这个错误,你可能需要去 webpack 的仓库下找找看有没有相关的 issue。

谢谢你的回答
我是用的你的vue-nw-seed模版,并没有动webpack配置。
那么请问是需要在里面加上node-loader么?

在这里 build/webpack.base.conf.js 这一段的末尾加 node-loader 的配置

刚看到你的回答,我今天用另外一种方式让它跑起来了,
再webpack.base.conf.js里添加

var nodeExternals = require('webpack-node-externals')

然后再后面添加:

externals: [ nodeExternals({whitelist: [/^webpack-.*/].concat(utils.getVuePackages()})]

还要再utils里加上:

exports.getVuePackages = () =>
Object.keys(require('../package.json')
  .dependencies || {})
  .filter(name => {
    const package_json = require(`${name}/package.json`)
    const keywords = package_json.keywords || []
    const description = package_json.description || ''
    return (/^vue$|^vuex$|(^vue-)|(-vue$)/).test(name) || keywords.indexOf('vue') >= 0 || description.includes('Vue.js')
  })

我现在去试试你说的方法

按照你说的方法出现了如下错误:

ERROR in ./~/babel-loader/lib!./~/vue-loader/lib/selector.js?type=script&index=0!./src/App.vue
Module not found: Error: Can't resolve 'serialport.node' in 'E:\ELECTRON\VUE-NW-SEED2\src'
 @ ./~/babel-loader/lib!./~/vue-loader/lib/selector.js?type=script&index=0!./src/App.vue 3:0-41
 @ ./src/App.vue
 @ ./src/main.js
 @ multi ./build/dev-client ./src/main.js

请问这个怎么办啊?

这个报错的意思是 'E:\ELECTRON\VUE-NW-SEED2\src' 路径下没有 'serialport.node' 这个文件,检查路径吧

我什么都没干的情况下,错误信息又变成下面这样了。

 ERROR  Failed to compile with 1 errors


This dependency was not found:

* serialport.node in ./~/babel-loader/lib!./~/vue-loader/lib/selector.js?type=script&index=0!./src/App.vue

To install it, you can run: npm install --save serialport.node
> Listening at http://localhost:8080

然后我把serialport.node拷贝到了src文件夹下,依然是这个错误。

我是要把serialport.node拷贝到哪才行么?

谢谢你的回答。

这个报错和你之前的情况已经分析不出问题了。。。