根据建议,这个问题已被多次询问,但我没有看到解决我问题的答案中的任何内容。
我在Visual Studio 2015中创建了一个新的ASP.NET Core项目,目标是服务Angular2 TypeScript应用程序并使用Webpack打包脚本。我正在重新利用Webstorm项目中的一些组件(同样的东西--Angular2和TypeScript),它在那里工作正常。
不幸的是,我刚刚复制了第一个组件,发现我遇到了一个无法自行解决的错误。在Visual Studio IDE中,我在“require”下获得红色波浪形,而鼠标悬停文本显示为“找不到名称'需要'。无法解析符号'require'”。
这是有问题的组件文本(用于webpack / Angular2的require语法):
@Component({
selector: "myComponent",
template: require("./myComponent.html"),
styles: [require("./myComponent.css")]
})
同样,我也会在下面的代码片段中遇到与require相同的问题:
const sortBy = require('lodash.sortby');
现在,other帖子有answer suggests,我将typeRoots和类型添加到tsconfig.json的compilerOptions中。我看到了这个:
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"typeRoots": [
"node_modules/@types"
],
"types": [
"node",
"lodash.sortby"
]
}
}
当然,我已将这些包添加到我的package.json:
{
"dependencies": {
"lodash.sortby": "^4.7.0"
},
"devDependencies": {
"@types/node": "^6.0.60",
"@types/lodash.sortby": "^4.7.0"
}
}
我已成功安装了这些(以及许多其他文件)。
上面的后一个链接表明我可以将以下内容放在文件的顶部,但这似乎相当hacky并不是我真的想在解决方案中无限期地持续存在,尽管不可否认,它确实解决了问题:
declare var require: any
如前所述,这种require的使用在Webstorm中运行良好,我在两个IDE之间有相同的配置。 Visual Studio发生了什么,这不仅仅是在起作用?
谢谢!
修改
我已经了解了angular2-template-loader的存在。因为我想在这里使用带有Angular2的Webpack,这就是我使用require(根据他们的文档)的原因,但是这个angular2-template-loader负责让你将templateUrl和styleUrls作为相对引用(因此不使用require)指向文件)并在包装过程中为您换出所有内容。
在其他任何地方使用require仍然需要解决方法,如Gary的Typescript Modules链接中所述。
答案 0 :(得分:1)
我已经通过为Visual Studio 2015安装TypeScript的最新版本(目前)解决了这类问题。目前它是2.1.5。如果您将其用于2016.3.2版本,请更新ReSharper。
答案 1 :(得分:0)
请检查Using require to set templateUrl in Angular 2 while getting error
现在可能无法实现,因为commonjs是一个模块系统。 https://www.typescriptlang.org/docs/handbook/modules.html
根据编译期间指定的模块目标,编译器将为Node.js(CommonJS),require.js(AMD),isomorphic(UMD),SystemJS或ECMAScript 2015本机模块(ES6)模块生成适当的代码 - 装载系统。有关生成的代码中的定义,要求和注册调用的更多信息,请参阅每个模块加载器的文档。