// Copyright 2013 Lovell Fuller and others. // SPDX-License-Identifier: Apache-2.0 'use strict'; const platformAndArch = require('./platform')(); /* istanbul ignore next */ try { module.exports = require(`../build/Release/sharp-${platformAndArch}.node`); } catch (err) { // Bail early if bindings aren't available const help = ['', 'Something went wrong installing the "sharp" module', '', err.message, '', 'Possible solutions:']; if (/dylib/.test(err.message) && /Incompatible library version/.test(err.message)) { help.push('- Update Homebrew: "brew update && brew upgrade vips"'); } else { const [platform, arch] = platformAndArch.split('-'); if (platform === 'linux' && /Module did not self-register/.test(err.message)) { help.push('- Using worker threads? See https://sharp.pixelplumbing.com/install#worker-threads'); } help.push( '- Install with verbose logging and look for errors: "npm install --ignore-scripts=false --foreground-scripts --verbose sharp"', `- Install for the current ${platformAndArch} runtime: "npm install --platform=${platform} --arch=${arch} sharp"` ); } help.push( '- Consult the installation documentation: https://sharp.pixelplumbing.com/install' ); // Check loaded if (process.platform === 'win32' || /symbol/.test(err.message)) { const loadedModule = Object.keys(require.cache).find((i) => /[\\/]build[\\/]Release[\\/]sharp(.*)\.node$/.test(i)); if (loadedModule) { const [, loadedPackage] = loadedModule.match(/node_modules[\\/]([^\\/]+)[\\/]/); help.push(`- Ensure the version of sharp aligns with the ${loadedPackage} package: "npm ls sharp"`); } } throw new Error(help.join('\n')); }