Импортирование локального узла C ++ addon в Vue.js - PullRequest
0 голосов
/ 02 июня 2019
  1. В каталоге у меня есть этот сумасшедший простой аддон Node.js, который предоставляет несколько вызовов C ++:
// package.json
{
  "name": "simple-addon",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "gypfile": true,
  "scripts": {
    "build": "node-gyp rebuild",
    "clean": "node-gyp clean"
  },
  "files": [
    "src/*.cpp",
    "src/*.hpp",
    "binding.gyp"
  ],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "eslint": "^5.16.0",
    "node-gyp": "^4.0.0"
  },
  "dependencies": {
    "node-addon-api": "^1.6.3"
  }
}
// index.js
const simpleaddon = require('./build/Release/simple-addon.node');

module.exports = simpleaddon;

Сборка с использованием node-gyp идет хорошо,и в качестве проверки работоспособности я смог импортировать и использовать его в примере приложения узла, выполнив npm init, npm install ../simpleaddon в новом каталоге.

В клиентском приложении Vue.js, созданном с помощью vue-cli:

Мне не удалось просто импортировать его (по причинам, которые я до сих пор не понимаю полностью, извините), у меня былоиспользовать другой загрузчик: native-ext-loader.В противном случае я получу Module parse failed: Unexpected character '' (1:0) You may need an appropriate loader to handle this file type.

Настройка загрузчика:

// vue.config.js
module.exports = {
    chainWebpack: config => {
        config.module
            .rule('native')
            .test(/\.node$/)
            .use('native-ext-loader')
            .loader('native-ext-loader')
    }
}

Это добилось цели, но когда я пытаюсь импортировать в компонент с import simpleaddon from "simple-addon";, я получаю:

Uncaught Error: Cannot open /simple-addon.node: TypeError: Cannot read property 'dlopen' of undefined
    at Object.eval (simple-addon.node?5d7d:1)
    at eval (simple-addon.node:2)
    at Object../node_modules/simple-addon/build/Release/simple-addon.node (app.js:1663)
    at __webpack_require__ (app.js:724)
    at fn (app.js:101)
    at eval (index.js?7d23:1)
    at Object../node_modules/simple-addon/index.js (app.js:1674)
    at __webpack_require__ (app.js:724)
    at fn (app.js:101)
    at eval (cjs.js?!./node_modules/babel-loader/lib/index.js!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./src/components/SimpleAddonComponent.vue?vue&type=script&lang=js&:2)

Чего мне не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...