NodeJS приложение не может найти модули после связывания с Webpack - PullRequest
1 голос
/ 19 июня 2020

Я создаю сервер node / express, который пытаюсь связать, чтобы я мог развернуть его на сервере IIS. Следует отметить, что это только внутренний сервер. Как только я пытаюсь запустить код после того, как он был упакован, я получаю следующую ошибку:

ReferenceError: __WEBPACK_EXTERNAL_MODULE_dotenv__ is not defined
    at eval (webpack:///external_%22dotenv%22?:1:18)
    at Object.dotenv (C:\inetpub\wwwroot\my-deployments\server\bundle.js:271:1)
    at __webpack_require__ (C:\inetpub\wwwroot\my-deployments\server\bundle.js:20:30)
    at eval (webpack:///./src/server/server.js?:4:1)
    at Object../src/server/server.js (C:\inetpub\wwwroot\my-deployments\server\bundle.js:169:1)
    at __webpack_require__ (C:\inetpub\wwwroot\my-deployments\server\bundle.js:20:30)
    at eval (webpack:///multi_./src/server/server.js?:1:18)
    at Object.0 (C:\inetpub\wwwroot\my-deployments\server\bundle.js:216:1)
    at __webpack_require__ (C:\inetpub\wwwroot\my-deployments\server\bundle.js:20:30)
    at C:\inetpub\wwwroot\my-deployments\server\bundle.js:84:18

Я понимаю, что, похоже, произошла ошибка с модулем dotenv, однако я попытался с базовым c приложение, в котором было установлено только express, и я получил ту же ошибку, но с express вместо dotenv. Я полагаю, что это проблема с моим webpack.config. js, но я не могу понять, что может вызвать эту проблему.

webpack.config. js

const path = require('path')
const webpack = require('webpack')
const nodeExternals = require('webpack-node-externals')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const { CleanWebpackPlugin } = require('clean-webpack-plugin')

module.exports = {
    target: 'node',
    mode: 'development',
    entry: {
        bundle: ["./src/server/server.js"]
    },
    externals: [nodeExternals({
        importType: 'umd'
    })],
    plugins: [
        new CleanWebpackPlugin(),
        new HtmlWebpackPlugin({
            title: 'server'
        })
    ],
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist'),
    }
}

1 Ответ

0 голосов
/ 19 июня 2020

Проблема в ваших nodeExternals опциях. Удалите importType: 'umd' и соберите заново. Я тестировал это локально с помощью небольшого приложения express и вашей точной конфигурации, и у меня это сработало.

Проблема здесь в том, что вы сообщаете webpack, что все ваш импорт является «внешним "(не в комплекте) и что они используют umd (универсальное определение модуля) для раскрытия своего содержимого.

Umd часто используется для кода на стороне клиента, поэтому он будет работать в нескольких разных средах (<script> теги , общие js, модули amd, es6 и так далее). Что касается серверных / Nodejs только модулей ... не так много. Значение по умолчанию из importType равно commonjs, что является собственной системой загрузки модулей Node и которую будет использовать подавляющее большинство пакетов на стороне сервера.

...