【问题标题】:Getting Error: Cannot find module "." at webpackMissingModule出现错误:找不到模块“。”在 webpackMissingModule
【发布时间】:2018-05-07 06:16:30
【问题描述】:

我正在尝试 webpack 一个 express 应用程序,但无论我在哪里尝试检索 / 页面,都会遇到以下问题:

出现错误:找不到模块“。”在 webpackMissingModule

这是重现此内容的代码:

import express from 'express';

const app = express();
const port = 8088;

app.set('view engine', 'pug')

app.listen(port, () => console.log(`Listening on ${port}`));

app.get('/', (req, res) => {
    res.render('index');
});

最初我认为这是因为模块中不包含 pug,所以我尝试在页面中添加 require('pug'),但这只是将错误转移到服务器启动而不是运行时。

这是我的 webpack 配置:

const path = require('path');
module.exports = {
    entry: {
        index: path.join(__dirname, 'index.js')
    },
    target: 'node',
    module: {
        rules: [
            {
                test: /\.js$/,
                loader: 'babel-loader',
                include: [
                    __dirname
                ],
                exclude: /node_modules/
            }
        ]
    },
    resolve: {
        modules: [__dirname, 'node_modules']
    },
    output: {
        path: __dirname,
        filename: '[name].entry.js'
    }
}

我正在使用 express 4.16、pug 2.0-rc4、webpack 3.8 和 babel loader 7.1

我也尝试包含所有节点模块,但随后出现不同的错误(dP.f 不是函数)

【问题讨论】:

    标签: javascript node.js express webpack pug


    【解决方案1】:

    那是因为尽管您将 node_modules 排除在 babel 编译之外,但它们仍然包含在您的包中。

    您还需要忽略 node_modules 被包含在您的捆绑包中。

    安装webpack-node-externals

    npm install webpack-node-externals --save-dev

    在你的 webpack 配置中添加两行代码。

    const path = require('path');
    const nodeExternals = require('webpack-node-externals'); //include this
    
    module.exports = {
        entry: {
            index: path.join(__dirname, 'index.js')
        },
        target: 'node',
        module: {
            rules: [
                {
                    test: /\.js$/,
                    loader: 'babel-loader',
                    include: [
                        __dirname
                    ],
                    exclude: /node_modules/
                }
            ]
        },
        resolve: {
            modules: [__dirname, 'node_modules']
        },
        externals: [nodeExternals()], // just add this
        output: {
            path: __dirname,
            filename: '[name].entry.js'
        }
    }
    

    【讨论】:

    • 这行得通,但它可能并不理想,因为我将无法直接部署捆绑包,而是还需要在生产环境中安装所有模块。但是,我可能可以摆弄一个白名单来满足我的需要
    猜你喜欢
    • 2019-06-11
    • 2018-02-10
    • 2018-02-02
    • 2018-03-21
    • 1970-01-01
    • 2019-04-02
    • 2019-06-30
    • 2018-02-19
    • 2022-07-11
    相关资源
    最近更新 更多