Ita*_*nor 4 node.js typescript tsc
在我的 Express 项目中,我从@common/foo. 感谢pathsin tsconfig.json,它只是../common/src/foo. 这很棒,并且可以使用以下脚本进行开发nodemon.json:
{
"watch": ["src", "../common/src"],
"ext": "ts",
"ignore": ["src/public"],
"exec": "ts-node -r tsconfig-paths/register src/index.ts"
}
Run Code Online (Sandbox Code Playgroud)
问题是我不能让它在生产模式下工作。
我使用 构建项目tsc,如果我检查生成的文件,它们会从@common/而不是从导入内容../common/src/。起初我认为这很好,因为tsconfig-paths在运行时工作,所以我只需要将它包含在start脚本中:
node -r tsconfig-paths/register dist/index.js
Run Code Online (Sandbox Code Playgroud)
不幸的是它不起作用,我Cannot find module '@common/foo在控制台中收到了这些错误消息。
有什么问题?我配置错了吗?
我的package.json(删除了所有不相关的部分):
{
"main": "index.js",
"scripts": {
"start": "cross-env NODE_ENV=prod node dist/index.js",
"build": "rimraf ./dist/ && cross-env NODE_ENV=prod tsc"
},
"dependencies": {
"express": "^4.17.1"
},
"devDependencies": {
"@types/express": "^4.17.4",
"@types/node": "^13.11.0",
"cross-env": "^6.0.3",
"rimraf": "^3.0.2",
"ts-node": "^8.8.2",
"tsconfig-paths": "^3.9.0",
"typescript": "^3.8.3"
}
}
Run Code Online (Sandbox Code Playgroud)
我的tsconfig.json(删除了所有不相关的部分):
{
"compilerOptions": {
"module": "commonjs",
"baseUrl": "./",
"outDir": "dist",
"experimentalDecorators": true,
"allowSyntheticDefaultImports": true,
"esModuleInterop": true,
"noImplicitAny": false,
"target": "es6",
"emitDecoratorMetadata": true,
"moduleResolution": "node",
"importHelpers": true,
"types": [
"node"
],
"typeRoots": [
"node_modules/@types"
],
"paths": {
"@common/*": [
"../common/src/*"
]
}
},
"include": [
"./src/**/*.ts"
],
"exclude": [
"./src/dist/"
],
"references": [
{
"path": "../common"
}
]
}
Run Code Online (Sandbox Code Playgroud)
对于仍然坚持这一点的人:
node -r ts-node/register/transpile-only -r tsconfig-paths/register dist/index.js
Run Code Online (Sandbox Code Playgroud)
这是你需要做的。
在很多地方都有人问过这个问题,显然 Typescript 可以为开发创建路径别名,但不能为生产创建路径别名(不要引用我的话,我使用它还不到一个月)。
为了解决这个问题,我安装了“module-alias”,这是一个包,可以解决构建后的路径问题,而不会干扰开发。
我正在构建一个 Express-js 应用程序,并拥有以下文件:
服务器.js:
import env from '@env';
import app from './app';
app.listen(env.SERVER_PORT || 3000);
Run Code Online (Sandbox Code Playgroud)
tsconfig.json(相关部分):
{
"compilerOptions": {
"baseUrl": "./src",
"paths": {
"@env": ["path/to/env"]
}
}
}
Run Code Online (Sandbox Code Playgroud)
这在开发运行时解决了路径问题,但在使用“tsc”构建之后却没有解决。为了解决这个问题,我添加了“module-alias”包并进行了以下更改:
服务器.js:
import './paths';
import env from '@env';
import app from './app';
app.listen(env.SERVER_PORT || 3000);
Run Code Online (Sandbox Code Playgroud)
路径.js
import 'module-alias/register';
import { addAliases } from 'module-alias';
addAliases({
'@env': `${__dirname}/path/to/env`,
});
Run Code Online (Sandbox Code Playgroud)
这确保了 @env 在开发运行时和构建后都能解析。希望能帮助到你!
| 归档时间: |
|
| 查看次数: |
2466 次 |
| 最近记录: |