[英]How can I resolve `Error: Could not locate the bindings file.` when using `node-ffi`?
Some details:一些细节:
npm
v3.10.3 npm
v3.10.3nvm
v0.29.0 nvm
v0.29.0 I recently built an npm
package that interacts with a shared C library using ffi
.我最近构建了一个
npm
包,它使用ffi
与共享的 C 库交互。 The package works perfectly on its own (built with babel
).该软件包可以完美运行(使用
babel
构建)。 I'm trying to integrate it into a proof-of-concept app and am running into lots of problems with bindings
.我正在尝试将它集成到一个概念验证应用程序中,并且遇到了很多
bindings
问题。 I'm using webpack
to bundle my POC app and that's where I'm running into this issue.我正在使用
webpack
来捆绑我的 POC 应用程序,这就是我遇到这个问题的地方。
Here's my webpack.config.js
:这是我的
webpack.config.js
:
/* eslint-disable */
var webpack = require('webpack');
var path = require('path');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var buildPath = path.resolve(__dirname, 'wp-build/');
module.exports = [
{
name: 'frontend',
entry: './src/frontend/index.js',
output: {
path: buildPath,
filename: 'frontend.bundle.js',
},
module: {
loaders: [{
test: /\.js/,
exclude: /(node_modules|build)/,
loader: 'babel-loader',
}],
},
plugins: [
new HtmlWebpackPlugin(),
],
devServer: {
contentBase: buildPath,
filename: 'frontend.bundle.js',
publicPath: '/assets/',
port: 8000,
stats: {
colors: true,
},
},
},
{
name: 'backend',
entry: './src/backend/server.js',
output: {
path: buildPath,
filename: 'backend.bundle.js',
},
module: {
loaders: [{
test: /\.js/,
exclude: /(node_modules|build|\.json|\.md)/,
loader: 'babel-loader',
}],
},
options: {
symlinks: true,
},
target: 'node',
},
];
The frontend
task builds a bundle from this Javascript (ES6): frontend
任务从这个 Javascript (ES6) 构建一个包:
console.log('This is the frontend calling!!');
Simple right?简单吧?
The backend
task builds a bundle from this Javascript (ES6): backend
任务从这个 Javascript (ES6) 构建一个包:
import Stack from 'stack-vod';
const stack = new Stack();
console.log(stack);
where stack-vod
is my package that's using ffi
.其中
stack-vod
是我使用ffi
包。
Here's the package.json
file for the POC app:这是 POC 应用程序的
package.json
文件:
{
"name": "stack-as-package",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "./node_modules/.bin/webpack",
"dev": "./node_modules/.bin/webpack-dev-server"
},
"author": "Zachary Abresch <zachary.abresch@gmail.com>",
"license": "MIT",
"devDependencies": {
"babel-core": "^6.17.0",
"babel-eslint": "^7.0.0",
"babel-loader": "^6.2.5",
"babel-preset-es2015": "^6.16.0",
"babel-preset-stage-0": "^6.16.0",
"eslint": "^3.7.1",
"eslint-config-airbnb": "^12.0.0",
"eslint-plugin-import": "^1.16.0",
"eslint-plugin-jsx-a11y": "^2.2.3",
"eslint-plugin-react": "^6.4.1",
"html-webpack-plugin": "^2.22.0",
"webpack": "^1.13.2",
"webpack-dev-server": "^1.16.2"
},
"dependencies": {
"stack-vod": "[Private Gitlab Repository]"
}
}
Here are the steps to replicate the issue:以下是重现问题的步骤:
npm i
npm run build
node ./wp-build/backend.bundle.js
Step 1 works fine.第 1 步工作正常。 Save for a few warnings, no errors when installing
npm
packages.保存一些警告,安装
npm
包时没有错误。
Step 2 Shows this output:步骤 2显示此输出:
> stack-as-package@1.0.0 build /Users/zabresch/Documents/8x8/scratching/stack-as-package
> webpack
Hash: 513274db1b2b97352c7b3aed8d398daba0b6527f
Version: webpack 1.13.2
Child frontend:
Hash: 513274db1b2b97352c7b
Version: webpack 1.13.2
Time: 859ms
Asset Size Chunks Chunk Names
frontend.bundle.js 1.45 kB 0 [emitted] main
index.html 191 bytes [emitted]
+ 1 hidden modules
Child html-webpack-plugin for "index.html":
+ 3 hidden modules
Child backend:
Hash: 3aed8d398daba0b6527f
Version: webpack 1.13.2
Time: 949ms
Asset Size Chunks Chunk Names
backend.bundle.js 137 kB 0 [emitted] main
+ 40 hidden modules
WARNING in ./~/bindings/bindings.js
Critical dependencies:
76:22-40 the request of a dependency is an expression
76:43-53 the request of a dependency is an expression
@ ./~/bindings/bindings.js 76:22-40 76:43-53
WARNING in ./~/bindings/package.json
Module parse failed: /Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/bindings/package.json Unexpected token (2:9)
You may need an appropriate loader to handle this file type.
SyntaxError: Unexpected token (2:9)
at Parser.pp$4.raise (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/node_modules/acorn/dist/acorn.js:2221:15)
at Parser.pp.unexpected (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/node_modules/acorn/dist/acorn.js:603:10)
at Parser.pp.semicolon (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/node_modules/acorn/dist/acorn.js:581:61)
at Parser.pp$1.parseExpressionStatement (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/node_modules/acorn/dist/acorn.js:966:10)
at Parser.pp$1.parseStatement (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/node_modules/acorn/dist/acorn.js:730:24)
at Parser.pp$1.parseBlock (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/node_modules/acorn/dist/acorn.js:981:25)
at Parser.pp$1.parseStatement (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/node_modules/acorn/dist/acorn.js:709:33)
at Parser.pp$1.parseTopLevel (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/node_modules/acorn/dist/acorn.js:638:25)
at Parser.parse (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/node_modules/acorn/dist/acorn.js:516:17)
at Object.parse (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/node_modules/acorn/dist/acorn.js:3098:39)
at Parser.parse (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/lib/Parser.js:902:15)
at DependenciesBlock.<anonymous> (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/lib/NormalModule.js:104:16)
at DependenciesBlock.onModuleBuild (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack-core/lib/NormalModuleMixin.js:310:10)
at nextLoader (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack-core/lib/NormalModuleMixin.js:275:25)
at /Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack-core/lib/NormalModuleMixin.js:259:5
at Storage.provide (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:52:20)
at CachedInputFileSystem.readFile (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:140:24)
at DependenciesBlock.onLoadPitchDone (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack-core/lib/NormalModuleMixin.js:255:7)
at DependenciesBlock.loadPitch (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack-core/lib/NormalModuleMixin.js:182:27)
at DependenciesBlock.doBuild (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack-core/lib/NormalModuleMixin.js:241:4)
at DependenciesBlock.build (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/lib/NormalModule.js:84:14)
at Compilation.buildModule (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/lib/Compilation.js:126:9)
at /Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/lib/Compilation.js:309:10
at /Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/lib/NormalModuleFactory.js:58:13
at NormalModuleFactory.applyPluginsAsyncWaterfall (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/tapable/lib/Tapable.js:75:69)
at onDoneResolving (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/lib/NormalModuleFactory.js:38:11)
at onDoneResolving (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/lib/NormalModuleFactory.js:121:6)
at /Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/lib/NormalModuleFactory.js:116:7
at /Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/node_modules/async/lib/async.js:726:13
at /Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/node_modules/async/lib/async.js:52:16
@ ./~/bindings ^\.\/.*$
WARNING in ./~/bindings/README.md
Module parse failed: /Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/bindings/README.md Unexpected token (2:3)
You may need an appropriate loader to handle this file type.
SyntaxError: Unexpected token (2:3)
at Parser.pp$4.raise (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/node_modules/acorn/dist/acorn.js:2221:15)
at Parser.pp.unexpected (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/node_modules/acorn/dist/acorn.js:603:10)
at Parser.pp$3.parseExprAtom (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/node_modules/acorn/dist/acorn.js:1822:12)
at Parser.pp$3.parseExprSubscripts (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/node_modules/acorn/dist/acorn.js:1715:21)
at Parser.pp$3.parseMaybeUnary (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/node_modules/acorn/dist/acorn.js:1692:19)
at Parser.pp$3.parseExprOp (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/node_modules/acorn/dist/acorn.js:1656:43)
at Parser.pp$3.parseExprOp (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/node_modules/acorn/dist/acorn.js:1658:21)
at Parser.pp$3.parseExprOps (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/node_modules/acorn/dist/acorn.js:1639:17)
at Parser.pp$3.parseMaybeConditional (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/node_modules/acorn/dist/acorn.js:1620:21)
at Parser.pp$3.parseMaybeAssign (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/node_modules/acorn/dist/acorn.js:1597:21)
at Parser.pp$3.parseExpression (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/node_modules/acorn/dist/acorn.js:1573:21)
at Parser.pp$1.parseStatement (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/node_modules/acorn/dist/acorn.js:727:47)
at Parser.pp$1.parseTopLevel (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/node_modules/acorn/dist/acorn.js:638:25)
at Parser.parse (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/node_modules/acorn/dist/acorn.js:516:17)
at Object.parse (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/node_modules/acorn/dist/acorn.js:3098:39)
at Parser.parse (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/lib/Parser.js:902:15)
at DependenciesBlock.<anonymous> (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack/lib/NormalModule.js:104:16)
at DependenciesBlock.onModuleBuild (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack-core/lib/NormalModuleMixin.js:310:10)
at nextLoader (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack-core/lib/NormalModuleMixin.js:275:25)
at /Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/webpack-core/lib/NormalModuleMixin.js:259:5
at Storage.finished (/Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:38:16)
at /Users/zabresch/Documents/8x8/scratching/stack-as-package/node_modules/graceful-fs/graceful-fs.js:78:16
at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:445:3)
@ ./~/bindings ^\.\/.*$
Step 3 responds with this error:第 3 步响应此错误:
/Users/zabresch/Documents/8x8/scratching/stack-as-package/wp-build/backend.bundle.js:2688
throw err
^
Error: Could not locate the bindings file. Tried:
→ /Users/zabresch/Documents/8x8/scratching/stack-as-package/build/binding.node
→ /Users/zabresch/Documents/8x8/scratching/stack-as-package/build/Debug/binding.node
→ /Users/zabresch/Documents/8x8/scratching/stack-as-package/build/Release/binding.node
→ /Users/zabresch/Documents/8x8/scratching/stack-as-package/out/Debug/binding.node
→ /Users/zabresch/Documents/8x8/scratching/stack-as-package/Debug/binding.node
→ /Users/zabresch/Documents/8x8/scratching/stack-as-package/out/Release/binding.node
→ /Users/zabresch/Documents/8x8/scratching/stack-as-package/Release/binding.node
→ /Users/zabresch/Documents/8x8/scratching/stack-as-package/build/default/binding.node
→ /Users/zabresch/Documents/8x8/scratching/stack-as-package/compiled/6.5.0/darwin/x64/binding.node
at bindings (/Users/zabresch/Documents/8x8/scratching/stack-as-package/wp-build/backend.bundle.js:2685:10)
at Object.<anonymous> (/Users/zabresch/Documents/8x8/scratching/stack-as-package/wp-build/backend.bundle.js:561:52)
at __webpack_require__ (/Users/zabresch/Documents/8x8/scratching/stack-as-package/wp-build/backend.bundle.js:20:30)
at Object.<anonymous> (/Users/zabresch/Documents/8x8/scratching/stack-as-package/wp-build/backend.bundle.js:466:12)
at __webpack_require__ (/Users/zabresch/Documents/8x8/scratching/stack-as-package/wp-build/backend.bundle.js:20:30)
at Object.<anonymous> (/Users/zabresch/Documents/8x8/scratching/stack-as-package/wp-build/backend.bundle.js:80:13)
at Object.<anonymous> (/Users/zabresch/Documents/8x8/scratching/stack-as-package/wp-build/backend.bundle.js:455:31)
at __webpack_require__ (/Users/zabresch/Documents/8x8/scratching/stack-as-package/wp-build/backend.bundle.js:20:30)
at Object.defineProperty.value (/Users/zabresch/Documents/8x8/scratching/stack-as-package/wp-build/backend.bundle.js:64:14)
at __webpack_require__ (/Users/zabresch/Documents/8x8/scratching/stack-as-package/wp-build/backend.bundle.js:20:30)
I've tried a ton of "fixes" I found on SO and GH but none of them have worked.我试过一吨的“修复”的我对SO和GH找到,但他们都没有工作。 Can anyone tell me what's going on here and what can be done to fix it?
谁能告诉我这里发生了什么以及可以做些什么来解决它? I've been slamming my head against this for days and 2 teammates spent days last week trying to figure this out too.
几天来我一直在反对这个问题,上周有两个队友也花了几天时间试图解决这个问题。
BTW, webpack
is a requirement of my team as this will eventually be used on a larger project using electron
and webpack
is already being used to build there.顺便说一句,
webpack
是我团队的一项要求,因为它最终将用于使用electron
的更大项目,并且webpack
已经被用于在那里构建。 So answers like "don't use webpack" won't cut the mustard.所以像“不要使用 webpack”这样的答案不会减少芥末。 :)
:)
First things first, you may need a json and an md file loader, do npm i -S json-loader
and npm i -S file-loader
, and then update this in webpack.config.js首先,您可能需要一个 json 和一个 md 文件加载器,执行
npm i -S json-loader
和npm i -S file-loader
,然后在webpack.config.js 中更新它
"loaders": [{
test: /\.js/,
exclude: /(node_modules|build)/,
loader: 'babel-loader',
}, {
test: /\.md(\?v=\d+\.\d+\.\d+)?$/,
loader: "file"
}, {
test: /\.json$/,
loader: 'json-loader'
}]
If this does not resolve the issue, check if binding.node exists after doing this, and reply then I will update my answer.如果这不能解决问题,请在执行此操作后检查binding.node 是否存在,然后回复我将更新我的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.