【问题标题】:Typescript. ReferenceError: require is not defined [duplicate]打字稿。 ReferenceError:未定义要求[重复]
【发布时间】:2017-01-22 23:31:05
【问题描述】:

我阅读了 TypeScript 的官方 doc,并从那里复制代码。

我安装了 commonjs 和 requerejs。

"devDependencies": {
  ...
  "commonjs": "latest",
  "requirejs": "latest"
}

但我在浏览器中遇到错误:

ReferenceError: require is not defined

是index.html:

<!DOCTYPE html>
<body>
     <script src="main.js"></script>
</body>

编译后就是main.js:

"use strict";
var core_1 = require("./some_dir/some_file");
window.onload = function () {
    var some = new some_file_1.SomeClass();
};

【问题讨论】:

  • 你是如何运行你的程序的?另外:你在使用捆绑器吗?
  • 我正在使用 PyCharm。运行->运行'index.html'
  • 那么如何将所有的js文件包含到html页面中呢?只需将每个 .js 文件都包含为新的脚本标签?
  • 我只包含 main.js。就像上面的例子。这是坏的?我能在 PyCharm 中听到 TypeScript helloworld 项目的真实方法吗?

标签: javascript typescript requirejs


【解决方案1】:

浏览器不了解模块(目前)。这意味着,如果你只在 node 中执行 require() 就可以工作,但浏览器不知道如何处理它。

有两种主要的解决方法:

  • 删除 exports/require 语句并将每个 js 文件(以正确的依赖顺序)包含到您的 html 文件中(作为脚本标签)。它们都将具有相同的范围,并且就像只有一个大的串联文件一样工作。这个解决方案非常糟糕,因为它破坏了作用域,不能真正与你通过 npm 获得的模块一起工作,并且加载时间很差,因为它必须从服务器获取多个 js 文件。
  • 使用像webpack 这样的资源捆绑器。 Webpack 将从您的 main.js 文件开始查看所有依赖文件,并将它们打包并压缩成一个小的 .js 文件。这也适用于外部依赖项(npm)。然后,您所要做的就是将单个 bundle.js 文件包含到 html 中。

【讨论】:

  • 哇,我尝试了 webpack,它正在工作。这有点复杂,但我认为这是有好处的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-13
  • 2016-10-23
  • 1970-01-01
  • 2018-01-21
  • 2021-05-09
  • 2015-06-12
  • 2021-11-08
相关资源
最近更新 更多