- В каталоге у меня есть этот сумасшедший простой аддон 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)
Чего мне не хватает?