Description
- Operating System: Windows 10
- Node Version: 15.3.0
- NPM Version: 7.0.14
- Yarn Version: 1.22.10
- webpack Version: 4.46.0
- node-loader Version: 1.0.2
Expected Behavior
Copy the index.*.node file to webpack_output directory and maybe it is good idea rename that from index (name in some native modules) to other to avoid collision
Actual Behavior
TypeError: Can not find node binding files from kobadonga-win32-x64-gnu, kobadonga-win32-x64-msvc and C:\Users\user\Documents\Repos\example-issue-node-loader\example\webpack_output\main\index.win32-x64-gnu.node, C:\Users\user\Documents\Repos\example-issue-node-loader\example\webpack_output\main\index.win32-x64-msvc.node
at loadBinding (webpack-internal:///./node_modules/@node-rs/helper/lib/loader.js:27:11)
at eval (webpack-internal:///./node_modules/kobadonga/index.js:3:18)
at Object../node_modules/kobadonga/index.js (C:\Users\user\Documents\Repos\example-issue-node-loader\example\webpack_output\main\index.js:143:1)
at __webpack_require__ (C:\Users\user\Documents\Repos\example-issue-node-loader\example\webpack_output\main\index.js:21:30)
at eval (webpack-internal:///./src/main.ts:43:35)
at Object../src/main.ts (C:\Users\user\Documents\Repos\example-issue-node-loader\example\webpack_output\main\index.js:155:1)
at __webpack_require__ (C:\Users\user\Documents\Repos\example-issue-node-loader\example\webpack_output\main\index.js:21:30)
at C:\Users\user\Documents\Repos\example-issue-node-loader\example\webpack_output\main\index.js:85:18
at Object.<anonymous> (C:\Users\user\Documents\Repos\example-issue-node-loader\example\webpack_output\main\index.js:88:10)
at Module._compile (internal/modules/cjs/loader.js:1152:30)
Code
// webpack.config.js
const path = require('path');
const rules = require('./webpack.rules');
const plugins = require('./webpack.plugins').mainPlugins;
module.exports = {
entry: './src/main.ts',
target: 'electron-main',
node: {
__dirname: false,
},
module: {
rules,
},
plugins,
resolve: {
alias: {
'*': path.resolve(__dirname, 'node_modules'),
},
extensions: ['.js', '.ts', '.jsx', '.tsx', '.css', '.json'],
},
devtool: 'cheap-module-eval-source-map',
output: {
path: path.resolve(__dirname, 'webpack_output/main'),
},
};
// webpack.rules.js
module.exports = [
// Add support for native node modules
{
test: /\.node$/,
loader: 'node-loader',
},
{
test: /\.(m?js|node)$/,
parser: { amd: false },
use: {
loader: '@marshallofsound/webpack-asset-relocator-loader',
options: {
outputAssetBase: 'native_modules',
},
},
},
{
test: /\.tsx?$/,
exclude: /(node_modules|\.webpack)/,
use: {
loader: 'ts-loader',
options: {
transpileOnly: true,
},
},
},
];
How Do We Reproduce?
Download the zip and the readme file has instructions to build and reproduce it:
The native dependency is built first (using NAPI-rs) and it put the index.*.node
in the package directory, in package.json
files include *.node
. The dependency is in the other package.json
as a file:
dependency, and can find the *.js
file but do nothing about the native module file.
Additional information
I realize now about the .node
file is not copied inside node_modules
subdirectory even it is in package.json
files
property. Maybe because it is defined as file:
dependency instead of a gzip.
Another try
Packing using yarn pack
and using that in the file:
path the .node
file is in node_modules
but the error is same.