【发布时间】:2020-04-18 19:41:18
【问题描述】:
我正在尝试使用 Webpack 捆绑使用 TypeScript 构建的 Node Express 服务器。
编译/转译成一个 JavaScript 文件 server.js 效果很好,但该文件似乎没有包含所有必要的导入。如果文件在dist/server.js 中并且node_modules/... 中仍然有Node 模块,那么使用node dist/server.js 启动服务器效果很好。但是,如果我将 server.js 复制到任何其他位置而不复制 Node 模块,然后启动它,它不会找到使用 @ 导入的类。
可能的错误:
mysystem:Desktop myuser$ node server.js
internal/modules/cjs/loader.js:582
throw err;
^
Error: Cannot find module '@overnightjs/core'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:580:15)
at Function.Module._load (internal/modules/cjs/loader.js:506:25)
at Module.require (internal/modules/cjs/loader.js:636:17)
at require (internal/modules/cjs/helpers.js:20:18)
at Object.<anonymous> (/Users/myuser/Desktop/server.js:1:1422)
at a (/Users/myuser/Desktop/server.js:1:172)
at Object.<anonymous> (/Users/myuser/Desktop/server.js:1:6473)
at a (/Users/myuser/Desktop/server.js:1:172)
at Object.<anonymous> (/Users/myuser/Desktop/server.js:1:6233)
at a (/Users/myuser/Desktop/server.js:1:172)
我认为我的 Webpack 配置文件中可能缺少一些内容,即:
const path = require('path');
const nodeExternals = require('webpack-node-externals');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
module.exports = {
entry: "./src/start.ts",
output: {
filename: "server.js",
path: path.resolve(__dirname, "dist")
},
node: {
// Need this when working with express, otherwise the build fails
__dirname: false, // if you don't put this is, __dirname
__filename: false, // and __filename return blank or /
fs: 'empty',
},
resolve: {
alias: {},
// Add '.ts', and '.tsx' as resolvable exteensions.
extensions: [".ts", ".tsx", ".js", ".json"]
},
externals: [nodeExternals()], // Need this to avoid error when working with Express
module: {
rules: [
// All files with a '.ts' or '.tsx' extension will be handled by 'awesome-typescript-loader'.
{ test: /\.tsx?$/, loader: "awesome-typescript-loader" },
// All output '.js' files will have any sourcemaps re-processed by 'source-map-loader'.
{ enforce: "pre", test: /\.js$/, loader: "source-map-loader" }
]
},
plugins: [
new CleanWebpackPlugin({
cleanAfterEveryBuildPatterns: ['dist']
})
]
};
我使用的版本:
- 节点 (v10.13.0)
- 纱线 (1.7.0)
- Express (4.17.1)
- TypeScript (3.7.4)
- Webpack (4.41.4)
- Webpack-CLI (3.3.10)
如何在 Webpack 的包中添加以 @ 开头的导入?
【问题讨论】:
标签: node.js typescript express webpack import