Webpack build and dirname

Рейтинг: 0Ответов: 0Опубликовано: 04.02.2023

Проект в котором много папок, файлов внутри папок, собираю в один файл и при запуске все фрагменты кода где есть чтение через path.dirname(__dirname) возвращают корневую папку, соответственно все пути в коде сбитые.

Например есть модуль админ в котором __dirname = Admin Но после сборки и запуске __dirname = Server Потому что папки админ не существует уже, а вебпак собрал все в один файл который я запускаю в папке Server

webpack.config.js

const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const path = require('path')
const isProduction = process.env.NODE_ENV === 'production';

module.exports = {
    target: 'node',
    mode: isProduction ? 'production' : 'development',
    devtool: 'source-map',
    entry: './src/index.js',
    output: {
        path: path.resolve(__dirname, '../../serverstart/packages/server'),
        filename: 'index.js'
    },
    resolve: {
        extensions: ['*', '.ts', '.tsx', '.js', '.json']
    },
    plugins: [new CleanWebpackPlugin()],
    externalsPresets: { node: true },
    node: {
        __dirname: true,
    },
    externals: [
        nodeExternals({
            allowlist: ['crypto-random-string', 'rage-rpc']
        })
    ],
}

Далее в коде я пытаюсь открыть файл

fs.readdirSync(path.resolve(__dirname)).forEach(dir => {
console.log(dir)
}

На что получаю ошибку

Error: ENOENT: no such file or directory, scandir 'F:\gambit\serverstart\src\database'

А все из-за того что __dirname показывает фактический путь, вебпак собрал все в один файл, а в исходном проекте у меня куча модулей, папок и файлов, везде прописан путь к ним

Ответы

Ответов пока нет.