asp.net-mvc - 如何使用RequiresJs加载typescript模块(asp.net mvc/visual studio环境)

标签 asp.net-mvc visual-studio typescript requirejs

<分区>

假设我有 2 个文件:test1.tstest2.ts .这是test1的内容:

export const x = 1

这是test1的内容:

import { x } from './test2'

alert(x);

当我运行应用程序时,出现此错误:Uncaught ReferenceError: exports is not defined at test1.js:2 .

根据其他帖子,这个错误是由于网络浏览器不支持export引起的。 , 和 require(...) .要解决它,一种解决方案是使用类似 RequireJs 的东西。

所以我做了一些阅读。 This article对我来说是最容易理解的。

  1. 我在 _Layout.cshtml 文件中添加了这一行。

    <script src="~/Scripts/require.js"></script>

  2. 创建配置文件。

    requirejs.config({
       baseUrl: '/Scripts/js'
    });
    
  3. 我已将test1test2 放在/Scripts/js 中文件夹。

  4. 运行应用程序,但仍然出现相同的错误:Uncaught ReferenceError: exports is not defined at test1.js:2 .

如何使用 RequireJs 修复错误?

感谢您的帮助。

编辑

解决方案不一定是 RequireJs,但可以解决问题。 typescript 上有很多很棒的教程,但他们都假设人们正在使用 node 或 angularjs。我只需要向我的 asp.net mvc 应用程序添加一些 typescript 。只要它是一个文件,一切都很好。现在我想重新使用一些代码,因此我将它们组织在不同的文件中。不幸的是,由于该错误,我无法继续前进。我已经在那里坐了 3 天了。

编辑 2

我已经按照 @artem 的建议将 commonJs 添加到 amd ,

{
  "compilerOptions": {
     "module": "amd",
     "noImplicitAny": true,
     "removeComments": true,
     "preserveConstEnums": true,
     "sourceMap": true
 }

现在我收到了这个错误。

Uncaught Error: Mismatched anonymous define() 
module: function (require, exports, CommonTypes_1) {
//...

好像this question正在处理同样的问题。我应该把这段代码放在一个新文件中吗?

最佳答案

我知道这有点老了,但刚遇到这个问题。这是我解决它的方法。

这篇文章很有帮助:https://volaresystems.com/blog/post/2014/05/27/Adding-RequireJS-to-an-ASPNET-MVC-project

首先,将 require.js 添加到 BundleConfig.cs。我的看起来像这样:

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
    "~/Scripts/jquery-{version}.js",
    "~/Scripts/require.js"));

接下来,确保 _Layout.cshtml 在您的包之后呈现“脚本”部分。我的看起来像这样:

@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrap")
@RenderSection("scripts", required: false)

然后在您的 View 中,呈现如下所示的脚本部分。我的 Index.cshtml 看起来像这样:

@section scripts
{
    <script>
        require(["Scripts/Init"],
            function (Init) {
                Init.Start();
            }
        );
    </script>
}

我的 ~/Scripts/Init.ts 文件如下所示:

import * as DataBind from "./DataBind"

export function Start() {
    DataBind.SetAllDatabinds(null);
}

从那里,您可以根据需要加载所有模块。我发现重要的是在你的 TypeScript 文件中不要有任何“松散代码”(即示例中的“alert(x)”)。一切都应该导出。

关于asp.net-mvc - 如何使用RequiresJs加载typescript模块(asp.net mvc/visual studio环境),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45023660/

相关文章:

asp.net-mvc - HTML.Raw 的 MVC @helper 错误

c# - 非通用声明不允许约束

c# - 恢复下载

c++ - 代码在有断点的情况下运行良好,但在没有断点的情况下则无法正常运行

c++ - 在 Visual Studio 中使用子项目

typescript - Electron,Typescript-函数中的其余参数不起作用

android - JsonResult 因安全连接而出现乱码

javascript - 导出由导入的类/接口(interface)组成的模块?

angular - 如何在使用 Angular HttpClient 时获取错误响应的 HTTP 状态?

c# - 引用到单独的子文件夹