我正在尝试打包一个快速应用程序,但是无论我在哪里检索/页面,都遇到以下问题:
这是复制此代码的代码:
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
不是函数) 最佳答案
这是因为尽管您排除了babt编译node_modules
的可能性,但它们仍被包含在您的 bundle 软件中。
您还需要忽略node_modules
使其不包含在 bundle 软件中。
安装webpack-node-externalsnpm 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'
}
}