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

Posted

技术标签:

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

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

这是重现此内容的代码:

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 不是函数)

【问题讨论】:

【参考方案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'
    

【讨论】:

这行得通,但它可能并不理想,因为我将无法直接部署捆绑包,而是还需要在生产环境中安装所有模块。但是,我可能可以摆弄一个白名单来满足我的需要

以上是关于出现错误:找不到模块“。”在 webpackMissingModule的主要内容,如果未能解决你的问题,请参考以下文章

无法在 AWS/nodejs 上运行自定义模块。退出并出现错误:找不到模块

出现错误,错误:npm install 后找不到模块“express”

为啥我的 Laravel 模块中出现“找不到类”错误?

安装 $npm 后,出现错误:找不到模块 '../lib/utils/unsupported.js'

我在 Node 终端程序中出现错误“错误:找不到模块”

使用 Webpack、SASS 和 React 在“main.scss”上出现错误“找不到模块”