我正在尝试使用webpack构建项目。这是我的webpack配置文件。
import * as path from 'path';
import * as webpack from 'webpack';
import { fileURLToPath } from 'url';
import nodeExternals from 'webpack-node-externals';
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const input = path.resolve(__dirname, '../src/server');
const output = path.resolve(__dirname, '../server');
const config: webpack.Configuration = {
entry: {
server: path.resolve(input, './index.ts'),
},
experiments: {
outputModule: true,
},
externals: [
nodeExternals(),
],
module: {
rules: [
{
exclude: /node_modules/,
loader: 'ts-loader',
options: {
transpileOnly: true,
},
test: /\.ts(x?)$/,
},
],
},
name: 'server',
output: {
filename: '[name].js',
path: output,
publicPath: '/node/',
chunkFormat: 'module',
},
resolve: {
extensions: ['*', '.js', '.jsx', '.json', '.ts', '.tsx'],
},
target: 'node',
};
export default config;
字符串
当我运行bundle时,我得到一个错误。
modules.exports = require(“express”);^
参考错误:require未在ES模块作用域中定义,您可以使用import代替此文件被视为ES模块,因为它具有'.js'文件扩展名并且'/test/package.json'包含“type”:要将其视为CommonJS脚本,请将其重命名为使用'.cjs'文件扩展名。
在我看到的包裹里
/***/ ((module) => {
module.exports = require("express");
/***/ }),
型
我期望得到这样的东西
/***/ ((module) => {
module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("http");
/***/ }),
型
我试着将这段代码添加到config中,但没有用
externals: [
nodeExternals(),
'express',
]
型
server.ts
import express from 'express';
const app = express();
app.get('/', (request, response) => {
response.send('Hi there');
});
app.listen(3000, () => {
console.log('Listen on the port 3000...');
});
型
1条答案
按热度按时间nzkunb0c1#
简短回答:对于从
webpack-node-externals
包导入的函数,将importType
选项设置为module
。与以下配置等效:
字符串
将外部对象的默认类型指定为“模块”。Webpack将为模块中使用的外部元素生成类似
import * as X from '...'
的代码。查看更多externals/#function
工作示例:
项目结构:
型
src/server.ts
:型
webpack.config.ts
:型
tsconfig.json
:型
package.json
:型
建置记录档:
型
产出
dist/main.js
:型
运行:
型
节点版本:v14.21.3