路径在tsc之后不起作用"/>
tsconfig.json中的路径在tsc之后不起作用
在我的Express项目中,我从@common/foo
之类的路径导入。多亏了paths
中的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"
}
问题是我无法使其在生产模式下工作。
我使用tsc
构建项目,如果我检查生成的文件,它们将从@common/
而不是../common/src/
导入内容。起初我认为这很好,因为tsconfig-paths
在运行时有效,所以我只需要像这样将其包含在start
脚本中:
node -r tsconfig-paths/register dist/index.js
不幸的是,它没有用,并且我在控制台中收到了这些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"
}
}
我的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"
}
]
}
回答如下:这在很多地方都被问到了,显然Typescript可以为开发提供路径别名,但不能为生产提供路径别名(请不要在此引用我,它已经使用了不到一个月的时间。]
要解决此问题,我安装了'module-alias',这是一个在构建后即可解决路径问题而又不干扰开发的软件包。
我正在构建一个Express-js应用程序,并且具有以下文件:
server.js:
import env from '@env';
import app from './app';
app.listen(env.SERVER_PORT || 3000);
tsconfig.json(相关部分):
{
"compilerOptions": {
"baseUrl": "./src",
"paths": {
"@env": ["src/path/to/env"]
}
}
}
这解决了开发运行时的路径,但是在使用'tsc'构建之后没有解决。要解决此问题,我添加了“ module-alias”包,并进行了以下更改:
server.js:
import 'module-alias/register';
import env from '@env';
import app from './app';
app.listen(env.SERVER_PORT || 3000);
package.json(相关部分):
{
"_moduleAliases": {
"@env": "dist/path/to/env"
}
}
这可以确保@env在开发运行时和构建后都能解析。希望对您有所帮助!
更多推荐
tsconfig.json中的路径在tsc之后不起作用
发布评论