Node.js 使用MySQL对NodeJS Express API进行网页打包会在模式下引发连接错误'-p';,不在'-d';

Node.js 使用MySQL对NodeJS Express API进行网页打包会在模式下引发连接错误'-p';,不在'-d';,node.js,webpack,mysqljs,Node.js,Webpack,Mysqljs,我有一个简单的expressapi,我用它来检索数据。我使用Webpack 4将其与一个非常简单的配置捆绑在一起: 'use strict'; const path = require('path'); module.exports = { entry: './src/main.js', target: 'node', output: { filename: 'gept_api.js', path: path.resolve(__dir

我有一个简单的expressapi,我用它来检索数据。我使用Webpack 4将其与一个非常简单的配置捆绑在一起:

'use strict';

const path = require('path');

module.exports = {
    entry: './src/main.js',
    target: 'node',
    output: {
        filename: 'gept_api.js',
        path: path.resolve(__dirname, 'dist'),
    },
    node: {
        __dirname: true,
    },
};
当我使用
webpack--config webpack.config.js-d
进行开发时,一切正常

但是,当我为生产运行
webpack--config webpack.config.js-p时,它突然不再工作,并在从池中获取连接时抛出一个错误

TypeError: Cannot read property 'query' of undefined
at Object.getItem (C:\Users\freek\Dropbox\Code\Apps\GEPT\GEPTv2_API\dist\gept_api.js:1:154359)
at t.db_pool.getConnection (C:\Users\freek\Dropbox\Code\Apps\GEPT\GEPTv2_API\dist\gept_api.js:1:154841)
at c._callback (C:\Users\freek\Dropbox\Code\Apps\GEPT\GEPTv2_API\dist\gept_api.js:1:68269)
at c.end (C:\Users\freek\Dropbox\Code\Apps\GEPT\GEPTv2_API\dist\gept_api.js:1:8397)
at C:\Users\freek\Dropbox\Code\Apps\GEPT\GEPTv2_API\dist\gept_api.js:1:322509
at Array.forEach (<anonymous>)
at C:\Users\freek\Dropbox\Code\Apps\GEPT\GEPTv2_API\dist\gept_api.js:1:322487
at process._tickCallback (internal/process/next_tick.js:112:11)
我如何使用连接:

pool.getConnection((err, connection) => {
    PlayerRepository.getPlayer(req.params.username, connection, (statusCode, player) => {
        connection.release();
        res.status(statusCode);
        res.send(player);
        return next();
    });
});  


我找到了导致问题的原因。显然,
mysql
包依赖于
Function.prototype.name
,因为设置
keep\fnames:true
修复了生产构建。()

我禁用了Webpack 4标准缩小功能,并使用了自定义UglifyJSPlugin设置:

'use strict';

const path = require('path');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')

module.exports = {
    entry: './src/main.js',
    target: 'node',
    output: {
        filename: 'gept_api.js',
        path: path.resolve(__dirname, 'dist'),
    },
    node: {
        __dirname: true,
    },
    optimization: {
        minimize: false,
    },
    plugins: [
        new UglifyJsPlugin({
            parallel: true,
            uglifyOptions: {
                ecma: 6,
                mangle: {
                    keep_fnames: true,
                },
            },
        }),
    ],
};
/** Get the player, and logs to HiscoreSearch if exists.
 *
 * Has callback with statusCode and player. Status code can be 200, 404 or 500.
 * @param {string} username The player's username.
 * @param {connection} connection The mysql connection object.
 * @param {(statusCode: number, player: { username: string, playerType: string }) => void} callback Callback with statusCode and the player if found.
*/
function getPlayer(username, connection, callback) {
const query = 'SELECT p.*, pt.type FROM Player p JOIN PlayerType pt ON p.playerType = pt.id WHERE username = ?';

connection.query(query, [username.toLowerCase()], (outerError, results, fields) => {
        if (outerError) callback(500);
        else if (results && results.length > 0) {
            logHiscoreSearch(results[0].id, connection, innerError => {
                if (innerError) callback(500);
                else callback(200, {
                    username: results[0].username,
                    playerType: results[0].type,
                    deIroned: results[0].deIroned,
                    dead: results[0].dead,
                    lastChecked: results[0].lastChecked,
                });
            });
        } else callback(404);
    });
}
'use strict';

const path = require('path');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')

module.exports = {
    entry: './src/main.js',
    target: 'node',
    output: {
        filename: 'gept_api.js',
        path: path.resolve(__dirname, 'dist'),
    },
    node: {
        __dirname: true,
    },
    optimization: {
        minimize: false,
    },
    plugins: [
        new UglifyJsPlugin({
            parallel: true,
            uglifyOptions: {
                ecma: 6,
                mangle: {
                    keep_fnames: true,
                },
            },
        }),
    ],
};