Как можно исправить ошибку "{addon}.node не является действительным приложением Win32"?

Я собираю проект в бандл с использованием Webpack версии 5. В процессе сборки возникает ошибка, когда я запускаю собранный проект. Вот мой Webpack конфиг:

```javascript
const path = require('path');
const TerserPlugin = require('terser-webpack-plugin');
const WebpackObfuscator = require('webpack-obfuscator');
const webpack = require('webpack');
const { constants } = require('os');

/**
 *
 * @param {*} env
 * @param {*} argv
 * @returns {import('webpack').Configuration}
 */
module.exports = (env, argv) => {
	return {
		mode: 'development' || 'production',
		entry: './src/index.ts',
		target: 'node',
		output: {
			filename: 'index.js',
			path: path.resolve('./bundle'),
			library: {
				type: 'commonjs2',
			},
			libraryTarget: 'commonjs2',
			clean: true,
		},
		resolve: {
			extensions: ['.ts', '.js', '.node'],
		},
		module: {
			rules: [
				{
					test: /\.ts$/,
					use: 'ts-loader',
					exclude: /node_modules/,
				},
				{
					test: /\.(node)$/,
					loader: 'node-loader',
					options: {
						name: '[name]_[contenthash].[ext]',
						flags: constants.dlopen.RTLD_NOW,
					},
				},
			],
		},
		optimization: {
			splitChunks: false,
			minimize: false,
			minimizer: [
				new TerserPlugin({
					minify: TerserPlugin.swcMinify,
					terserOptions: {
						format: { comments: false },
					},
					extractComments: false,
				}),
			],
		},
		plugins: [
			new webpack.optimize.LimitChunkCountPlugin({ maxChunks: 1 })
		],
	};
};
```

При попытке запустить проект после сборки появляется следующая ошибка:

```
Error: Secret-Path\bundle\node_modules/onnxruntime-node/bin/napi-v3/win32/x64/onnxruntime_binding.node is not a valid Win32 application.
Secret-Path\bundle\node_modules/onnxruntime-node/bin/napi-v3/
```

Можете подсказать, в чем может быть проблема и как ее исправить?
  • 17 октября 2024 г. 11:52
Ответы на вопрос 3
Ошибка "не является действительным приложением Win32" обычно возникает, когда файл, который вы пытаетесь запустить, несовместим с вашей операционной системой или архитектурой. В данном случае проблема может быть связана с тем, что вы используете нативный модуль (файл с расширением `.node`), который не подходит для текущей конфигурации, либо он был неправильно собран или не корректно подключен в вашем проекте.

Вот несколько шагов, которые можно предпринять для решения этой проблемы:

### 1. Убедитесь в совместимости архитектуры

Проверьте, что версия модуля `onnxruntime-node`, которую вы используете, совместима с вашей операционной системой (Win32, x64) и архитектурой (x64, arm, arm64 и т.д.). Например, если вы собираете ваше приложение для x64, убедитесь, что все зависимости также x64.

### 2. Пересоберите модули

Иногда помогает полная переустановка модулей. Попробуйте следующие команды в терминале:

```bash
rm -rf node_modules
npm install
```

и затем пересоберите ваш проект.

### 3. Проверьте конфигурацию Webpack

Обратите внимание на то, как вы настраивали `target` в Webpack. Если ваше приложение будет работать на Node.js, `target: 'node'` должно быть правильным. Однако, возможно, вам потребуется использовать другие настройки в зависимости от статуса вашего проекта. Если вы собираете для браузера, измените `target` на 'web'. 

### 4. Поменяйте конфигурацию для нативных модулей

Иногда нативные модули требуют дополнительной конфигурации. Убедитесь, что у вас в `webpack.config.js` правильно указан `node-loader` для `.node` файлов:

```javascript
{
    test: /\.node$/,
    use: 'node-loader',
},
```

### 5. Путь к модулю

Убедитесь, что путь к модулю `onnxruntime_binding.node` правильный. Путь должен указывать именно на сборку, которая подходит для вашей системы. Если данный модуль должен быть собран для вашего окружения, проверьте документацию для необходимых команд.

### 6. Попробуйте пакет `@napi-rs/onnxruntime`

Если модуль `onnxruntime-node` вызывает проблемы, вы также можете попробовать использовать альтернативный пакет, такой как `@napi-rs/onnxruntime`, который может быть более совместим с вашим стеком.

### 7. Проверка версий Node.js

Также убедитесь, что версия Node.js, которую вы используете, совместима с версией ваших модулей. Иногда обновление/понижение версии Node может помочь решить проблему.

### 8. Логи

Проверьте логи ошибки после сборки и запуска приложения. Они могут дать дополнительную информацию о том, что не так с модулем.

Если все вышеперечисленное не помогает, попробуйте более подробно изучить документацию к пакету `onnxruntime-node`, возможно там указаны проблемы совместимости или рекомендации по настройке.
Ответ можно найти тут : 


Hi @samlhuillier you need to install this
https://aka.ms/vs/17/release/vc_redist.x64.exe

onnxruntime-node require you to have MSVS C++ redist
Переустановить и пересобрать аддон или скачать готовую сборку: https://onnxruntime.ai/docs/get-started/with-windo...
Похожие вопросы