我有一个使用TypeScript的简单示例项目:https://github.com/unindented/ts-webpack-example
运行tsc -p .
(tsc
版本1.8.10)会引发以下情况:
app/index.ts(1,21): error TS2307: Cannot find module 'components/counter'.
components/button/index.ts(2,22): error TS2307: Cannot find module 'shared/backbone_base_view'.
components/button/index.ts(3,25): error TS2307: Cannot find module 'shared/backbone_with_default_render'.
components/counter/index.ts(2,22): error TS2307: Cannot find module 'shared/backbone_base_view'.
components/counter/index.ts(3,25): error TS2307: Cannot find module 'shared/backbone_with_default_render'.
components/counter/index.ts(4,27): error TS2307: Cannot find module 'shared/backbone_with_subviews'.
components/counter/index.ts(5,20): error TS2307: Cannot find module 'components/button'.
它抱怨所有本地文件的导入,如下所示:
import Counter from 'components/counter';
如果我将它更改为相对路径它可以工作,但我不想这样做,因为它会让我的生活在移动文件时更加困难:
import Counter from '../components/counter';
vscode
代码库不使用相对路径,但一切正常,所以我必须在项目中遗漏一些内容:https://github.com/Microsoft/vscode/blob/0e81224179fbb8f6fda18ca7362d8500a263cfef/src/vs/languages/typescript/common/typescript.ts#L7-L14
你可以查看我的GitHub仓库,但如果它有帮助,我正在使用的tsconfig.json
文件:
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"noImplicitAny": false,
"removeComments": false,
"preserveConstEnums": true,
"sourceMap": true,
"outDir": "dist"
},
"exclude": [
"dist",
"node_modules"
]
}
有趣的是,使用webpack
通过ts-loader
构建项目工作正常,所以我猜这只是一个配置问题......
答案 0 :(得分:66)
@vladima回复this issue on GitHub:
编译器如何解析模块的方式由 moduleResolution选项,可以是
node
或classic
(更多 可以找到详细信息和差异here)。如果省略此设置 如果模块为node
,则编译器将此设置视为commonjs
classic
- 否则。在您的情况下,如果您想要classic
模块 与commonjs
模块一起使用的解析策略 - 您需要设置 它明确地使用{ "compilerOptions": { "moduleResolution": "node" } }
答案 1 :(得分:5)
在某些情况下,您只需要更新include
数组即可。
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"moduleResolution": "node",
"outDir": "dist",
"sourceMap": false,
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
}
},
"include": ["src/**/*.ts", "tests/**/*.ts"],
"exclude": ["node_modules", ".vscode"]
}
答案 2 :(得分:2)
vscode代码库不使用相对路径,但一切都可以正常使用
真的取决于你的模块加载器。如果您将systemjs
与baseurl
一起使用,那么它就能正常运行。 VSCode使用自己的自定义模块加载器(基于旧版本的requirejs)。
使用commonjs
支持的相对路径。如果你移动文件你会得到一个打字稿编译时错误(一件好事)所以你会比绝大多数纯js项目更好(在npm)。
答案 3 :(得分:2)
在VS2019中,项目属性页的 TypeScript Build 选项卡具有“模块系统”的设置(下拉列表)。当我将其从“ ES2015”更改为 CommonJS 时,VS2019 IDE不再抱怨它找不到axios或redux-thunk(TS2307)。
tsconfig.json:
{
"compilerOptions": {
"allowJs": true,
"baseUrl": "src",
"forceConsistentCasingInFileNames": true,
"jsx": "react",
"lib": [
"es6",
"dom",
"es2015.promise"
],
"module": "esnext",
"moduleResolution": "node",
"noImplicitAny": true,
"noImplicitReturns": true,
"noImplicitThis": true,
"noUnusedLocals": true,
"outDir": "build/dist",
"rootDir": "src",
"sourceMap": true,
"strictNullChecks": true,
"suppressImplicitAnyIndexErrors": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"target": "es5",
"skipLibCheck": true,
"strict": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true
},
"exclude": [
"build",
"scripts",
"acceptance-tests",
"webpack",
"jest",
"src/setupTests.ts",
"node_modules",
"obj",
"**/*.spec.ts"
],
"include": [
"src",
"src/**/*.ts",
"@types/**/*.d.ts",
"node_modules/axios",
"node_modules/redux-thunk"
]
}
答案 4 :(得分:0)
就我而言,
//app.UseWebpackDevMiddleware(new WebpackDevMiddlewareOptions
//{
// HotModuleReplacement = true
//});
我在startup.cs中评论了它
答案 5 :(得分:0)
如果使用网络风暴,请按Ctrl + Alt + S并打开设置窗口。 Languages&Frameworks> TypeScript,启用“使用tsconfig.json”选项。
答案 6 :(得分:0)
我很难用打字稿导入枚举
错误TS2307:找不到模块...
我要做的就是将枚举迁移到另一个文件并进行以下更改:
__init__.py
到
export enum MyEnum{
VALUE = "MY_VALUE"
}
答案 7 :(得分:0)
我要做的就是重启docker。因此,如果您使用docker,请尝试
答案 8 :(得分:-4)
不要使用:从“api/xxxx”导入 UserController 应该是:从“./api/xxxx”导入UserController