【发布时间】:2020-01-02 11:02:22
【问题描述】:
我正在使用 Visual Studio 使用 TypeScript 创建一个 ASP.NET Core 2.2 Web 应用程序,并且我已经包含了 two.js 库以及我在网上找到的 npm 包中的 two.d.js(TypeScript 声明文件) .
问题是我不明白如何让模块工作(也许它与two.js 无关,但通常使用带有模块的纯 JavaScript)。
two.js 文件使用 JSDoc,但据我所知没有任何导出。
所以我的项目有这些文件(two.d.js、two.js 和 site.ts):
+ js
- two.d.js
- two.js
- site.ts
- something.ts
而site.js文件在开头导入two.js和something.ts:
// this uses the 'two.d.js' file and I get intellisense
import { Two } from "./two";
// this is some .ts file
import { Something } from "./something";
// create the Two.js instance
let placeholder = document.getElementById('placeholder');
// this line is what I want to get running
let twojs = new Two({ width: 1900, height: 885 }).appendTo(placeholder);
但是,当site.ts 被编译时,我尝试的任何模块选项在浏览器中都会失败:
-
“无”(即没有模块系统):失败,
exports未在编译的site.js文件的第一行定义:Object.defineProperty(exports, "__esModule", { value: true }); ES2015 本机模块系统:
./something和./two出现“404 未找到”失败。 TypeScript 编译器不会将.js扩展名附加到本机浏览器import语句,因此无法加载这些文件。但是,如果我在 TypeScript 中添加扩展名,则会出现编译错误。-
AMD/RequireJS:我收到“
Two不是构造函数”异常。 代码被编译成这个,我可以看到所有.js文件都正确加载,但是我猜问题是two.js没有原生导出任何东西:define(["require", "exports", "./something", "./two"], function (require, exports, something, two_1) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); let placeholder = document.getElementById('placeholder'); // Two is not a constructor let twojs = new two_1.Two({ width: 1900, height: 885 }).appendTo(placeholder); });
理想情况下,我希望每个页面都有一个捆绑的 .js 文件,以减少模块加载器服务器往返,但我对其他选项持开放态度。
【问题讨论】:
标签: javascript asp.net typescript requirejs bundling-and-minification