У меня есть приложение, структура которого выглядит так:
.
├── index.js
├── unix
│ ├── index.js
└── win32
├── foo.exe
└── index.js
win32/index.js обращался к foo.exe следующим образом:
let command = path.join(__dirname, "foo.exe") + ' -some-arguments';
exec(command);
Но теперь, используя Webpack, я компилирую свое приложение в один bundle.js и ставлю рядом с ним этот foo.exe:
.
├── foo.exe
└── bundle.js
И теперь path.join(__dirname, "foo.exe") больше не работает. Он не находит foo.exe. я изменил его на
let command = path.resolve(
"node_modules/my-library/dist",
"foo.exe"
);
И это работает нормально, но похоже, что есть лучший способ сделать это.
УПД:
мой конфигурационный файл Webpack:
const path = require("path");
const CopyPlugin = require("copy-webpack-plugin");
module.exports = {
mode: "production",
entry: "./src",
output: {
path: path.resolve(__dirname, "dist"),
filename: "bundle.js",
libraryTarget: "umd"
},
plugins: [new CopyPlugin([{ from: "./src/win32/foo.exe" }])],
target: "node"
};
Привет! Может быть, я не настолько опытен с Webpack. Я добавил свой файл конфигурации к вопросу
Спасибо за добавление конфига. Я написал ответ, вам просто нужно добавить к нему свойство.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Чтобы __dirname вел себя как обычно и не был изменен (издевался) Webpack, вы должны добавить свойство в конфигурацию Webpack:
module.exports = {
//...
node: {
__dirname: false,
}
};
Большое спасибо! Оно работает. Но в документации сказано, что это должно быть boolean или "mock", поэтому, пожалуйста, обновите ответ, и я приму его :)
Вам нужно добавить эту конфигурацию узла в свой файл webpack. Таким образом, вы можете использовать __dirname после того, как вы создали свой код с помощью веб-пакета.
node: {
__dirname: false,
},
Большое спасибо Тьен, я очень ценю это, но Себлор был первым
IIRC, Webpack может изменить пути, если вы используете
__dirname. Может быть, это проблема в вашей конфигурации веб-пакета?