Skip to content
This repository has been archived by the owner on Feb 12, 2024. It is now read-only.

leveldown : No native build was found for platform=linux arch=x64 runtime=electron abi=82 uv=1 libc=glibc node=12.16.3 electron=10.2.0 webpack=true #3525

Closed
raphael10-collab opened this issue Feb 4, 2021 · 3 comments
Labels
kind/support A question or request for support

Comments

@raphael10-collab
Copy link

raphael10-collab commented Feb 4, 2021

In Electron-Typescript app I'm having this issue:

(node:26402) UnhandledPromiseRejectionWarning: Error: No native build was 
found for platform=linux arch=x64 runtime=electron abi=82 uv=1 libc=glibc 
node=12.16.3 electron=10.2.0 webpack=true
    loaded from: /home/marco/webMatters/electronMatters/IpfsPlaying
/.webpack/main

    at Function.module.exports../node_modules/node-gyp-
build/index.js.load.path (/home/marco/webMatters/electronMatters/IpfsPlaying
/.webpack/main/index.js:193915:9)
    at load (/home/marco/webMatters/electronMatters/IpfsPlaying/.webpack
/main/index.js:193877:30)
    at Object../node_modules/leveldown/binding.js (/home/marco/webMatters
/electronMatters/IpfsPlaying/.webpack/main/index.js:130044:101)
    at __webpack_require__ (/home/marco/webMatters/electronMatters/IpfsPlaying
/.webpack/main/index.js:21:30)
    at Object../node_modules/leveldown/leveldown.js (/home/marco/webMatters
/electronMatters/IpfsPlaying/.webpack/main/index.js:130158:17)
at __webpack_require__ (/home/marco/webMatters/electronMatters/IpfsPlaying
/.webpack/main/index.js:21:30)
    at Object../node_modules/level/level.js (/home/marco/webMatters
/electronMatters/IpfsPlaying/.webpack/main/index.js:130032:111)
    at __webpack_require__ (/home/marco/webMatters/electronMatters/IpfsPlaying
/.webpack/main/index.js:21:30)
    at new LevelDatastore (/home/marco/webMatters/electronMatters/IpfsPlaying
/.webpack/main/index.js:62350:23)
    at Object.createBackend [as create] (/home/marco/webMatters
/electronMatters/IpfsPlaying/.webpack/main/index.js:111452:10)
(node:26402) UnhandledPromiseRejectionWarning: Unhandled promise rejection.      
This error originated either by throwing inside of an async function without a 
catch block, or by rejecting a promise which was not handled with .catch(). 
To terminate the node process on unhandled promise rejection, use the CLI flag
 `--unhandled-rejections=strict` (see https://nodejs.org
/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:26402) [DEP0018] DeprecationWarning: Unhandled promise rejections are 
deprecated. In the future, promise rejections that are not handled will 
terminate the Node.js process with a non-zero exit code.

in main.ts :

import Ipfs from 'ipfs';
import IpfsHttpClient from 'ipfs-http-client';

const ops = async () => {
  const node = await Ipfs.create({ repo: String(Math.random() + Date.now()) });
  console.log('Ipfs node is ready');
}

Looking for the package leveldown, I found it is used by ipfs :

(base) marco@pc01:~/webMatters/electronMatters/IpfsPlaying$ npm ls leveldown
[email protected] /home/marco/webMatters/electronMatters/IpfsPlaying
└─┬ [email protected]
  └─┬ [email protected]
    └─┬ [email protected]
      └─┬ [email protected]
        └── [email protected] 

I searched and found that someone else had the same problem, which solved in this way: electron/electron#20075 (comment)

I've put

  externals: {
    "pouchdb": "require('pouchdb')"
  }

in webpack.main.js :

module.exports = {
  /**
   * This is the main entry point for your application, it's the first file
   * that runs in the main process.
   */
  entry: ['./src/main.ts'],
  // Put your normal webpack config below here
  module: {
    rules: require('./webpack.rules'),
  },
  resolve: {
    extensions: ['.js', '.ts', '.jsx', '.tsx', '.css', '.json'],
    alias: require('./webpack.aliases'),
  },
  // https://github.com/electron/electron/issues/9920
  target: 'electron-main',
  externals: {
    "pouchdb": "require('pouchdb')"
  }
};

and in webpack.plugin.js :

// eslint-disable-next-line @typescript-eslint/no-var-requires
const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');

const webpack = require('webpack');

module.exports = [
  new ForkTsCheckerWebpackPlugin(),
  new webpack.ExternalsPlugin('commonjs', [
    'electron'
  ]),
  new webpack.ExternalsPlugin("commonjs", [
    'leveldown'
  ])
];

but didn't the solve the problem.

This is the package.json:

{
  "name": "IpfsPlaying",
  "version": "2.0.2",
  "description": "IpfsPlaying",
  "main": ".webpack/main",
  "scripts": {
    "start": "cross-env NODE_ENV=development electron-forge start",
    "package": "electron-forge package",
    "make": "electron-forge make",
    "publish": "electron-forge publish",
    "lint": "eslint --ext .ts ."
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/raphael10-collab/IpfsPlaying"
  },
  "license": "MIT",
  "config": {
    "forge": "./tools/forge/forge.config.js"
  },
  "devDependencies": {
    "@electron-forge/cli": "^6.0.0-beta.54",
    "@electron-forge/maker-deb": "6.0.0-beta.53",
    "@electron-forge/maker-rpm": "6.0.0-beta.53",
    "@electron-forge/maker-squirrel": "^6.0.0-beta.54",
    "@electron-forge/maker-zip": "6.0.0-beta.53",
    "@electron-forge/plugin-webpack": "6.0.0-beta.53",
    "@types/react": "^16.9.49",
    "@types/react-dom": "^16.9.8",
    "@types/webpack-env": "^1.15.2",
    "@typescript-eslint/eslint-plugin": "^4.1.1",
    "@typescript-eslint/parser": "^4.1.1",
    "copy-webpack-plugin": "6",
    "cross-env": "^7.0.2",
    "electron": "^10.1.2",
    "eslint": "^7.9.0",
    "eslint-import-resolver-alias": "^1.1.2",
    "eslint-plugin-import": "^2.20.0",
    "eslint-plugin-react": "^7.20.6",
    "fork-ts-checker-webpack-plugin": "^5.2.0",
    "less": "^3.12.2",
    "node-loader": "^1.0.1",
    "react-hot-loader": "^4.12.21",
    "ts-loader": "^8.0.3",
    "typescript": "^4.0.2",
    "webpack": "4"
  },
  "dependencies": {
    "@hot-loader/react-dom": "^16.13.0",
    "electron-squirrel-startup": "^1.0.0",
    "ipfs": "^0.54.1",
    "ipfs-http-client": "^49.0.1",
    "ipfs-utils": "^6.0.0",
    "react": "^16.13.1",
    "react-dom": "^16.13.1",
    "react-viewer": "^3.2.2",
    "react-window": "^1.8.6"
  }
}
  • node: v14.5.0
  • O.S.: Ubuntu 18.04.4 Desktop

I have opened an issue also in LevelDown github's page: Level/leveldown#756

@raphael10-collab raphael10-collab added the need/triage Needs initial labeling and prioritization label Feb 4, 2021
@achingbrain achingbrain added kind/support A question or request for support and removed need/triage Needs initial labeling and prioritization labels Feb 4, 2021
@achingbrain
Copy link
Member

I think you are seeing more problems related to conflicting or misconfigured build tools as in #3508

I suggest you start from the run-in-electron example which gives you a minimal setup for running IPFS under electron, then add your extra dependencies/build tools one by one until you start seeing errors.

@raphael10-collab
Copy link
Author

raphael10-collab commented Feb 4, 2021

I didn't explain before.
I removed all the not strictly required packages, and left only the minimum bare Electron-React-Typescript app.

This is the package.json :

{
  "name": "IpfsPlaying",
  "version": "2.0.2",
  "description": "IpfsPlaying",
  "main": ".webpack/main",
  "scripts": {
    "start": "cross-env NODE_ENV=development electron-forge start",
    "package": "electron-forge package",
    "make": "electron-forge make",
    "publish": "electron-forge publish",
    "lint": "eslint --ext .ts ."
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/raphael10-collab/IpfsPlaying"
  },
  "license": "MIT",
  "config": {
    "forge": "./tools/forge/forge.config.js"
  },
  "devDependencies": {
    "@electron-forge/cli": "^6.0.0-beta.54",
    "@electron-forge/maker-deb": "6.0.0-beta.53",
    "@electron-forge/maker-rpm": "6.0.0-beta.53",
    "@electron-forge/maker-squirrel": "^6.0.0-beta.54",
    "@electron-forge/maker-zip": "6.0.0-beta.53",
    "@electron-forge/plugin-webpack": "6.0.0-beta.53",
    "@types/react": "^16.9.49",
    "@types/react-dom": "^16.9.8",
    "@types/webpack-env": "^1.15.2",
    "@typescript-eslint/eslint-plugin": "^4.1.1",
    "@typescript-eslint/parser": "^4.1.1",
    "copy-webpack-plugin": "^7.0.0",
    "cross-env": "^7.0.2",
   "electron": "^11.2.2",
    "eslint": "^7.9.0",
    "eslint-import-resolver-alias": "^1.1.2",
    "eslint-plugin-import": "^2.20.0",
   "eslint-plugin-react": "^7.20.6",
   "fork-ts-checker-webpack-plugin": "^5.2.0",
    "less": "^3.12.2",
    "node-loader": "^1.0.1",
    "react-hot-loader": "^4.12.21",
    "ts-loader": "^8.0.3",
    "typescript": "^4.0.2",
    "webpack": "4"
  },
  "dependencies": {
    "@hot-loader/react-dom": "^16.13.0",
    "electron-squirrel-startup": "^1.0.0",
    "ipfs": "^0.54.1",
    "ipfs-http-client": "^49.0.1",
    "ipfs-utils": "^6.0.0",
    "react": "^16.13.1",
    "react-dom": "^16.13.1",
    "react-viewer": "^3.2.2",
    "react-window": "^1.8.6"
  }
}

leveldown, the package involved in this issues is used only by the packages used by ipfs:

(base) marco@pc01:~/webMatters/electronMatters/IpfsPlaying$ npm ls leveldown
[email protected] /home/marco/webMatters/electronMatters/IpfsPlaying
└─┬ [email protected]
  └─┬ [email protected]
    └─┬ [email protected]
     └─┬ [email protected]
        └── [email protected] 

In the minimal electron setup suggested in the example: https://github.com/ipfs/js-ipfs/blob/master/examples/run-in-electron/package.json I do not see electron-forge.

Does it mean that ipfs does not work with electron-forge?

@raphael10-collab
Copy link
Author

I'm proceeding as you suggested and till now I do not have problems. But I'm confident that I will discover the "culprit".
I close the issue and will open a new one, in case needed.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
kind/support A question or request for support
Projects
None yet
Development

No branches or pull requests

2 participants