被Webpack捆绑后,NodeJS应用程序找不到模块

时间:2020-06-19 01:26:05

标签: node.js express webpack

我正在创建要绑定的节点/表达服务器,以便可以将其部署到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模块似乎存在错误,但是我尝试了仅安装了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 :(得分:0)

问题出在您的nodeExternals选项中。删除importType: 'umd'并重新捆绑。我使用一个小型express应用和您的确切配置在本地进行了测试,并且对我有用。

这里的问题是,您告诉webpack 所有,您的导入是“外部的”(未捆绑),并且它们使用umd(通用模块定义)来公开其内容

Umd通常用于客户端代码,因此它将在多种不同的环境(<script>标签,commonjs,amd,es6模块等)中运行。至于服务器端/仅Nodejs的模块……不多。 importType的{​​{3}}是commonjs,它是Node的本机模块加载系统,并且将使用绝大多数服务器端程序包。