首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeScript + RequireJs +其他库(pdfjs)

TypeScript + RequireJs +其他库(pdfjs)
EN

Stack Overflow用户
提问于 2019-07-08 15:47:12
回答 1查看 242关注 0票数 0

我正在尝试将TypeScript集成到一个相当新的项目中,其中有几个库。为了支持旧浏览器,我决定以ES5为目标。我选择了模块系统AMD,因为它要到前端。

我的test.ts文件使用了3个库,我导入了这些库,这样TypeScript就可以使用这些库并进行良好的编译:

代码语言:javascript
复制
import * as $ from "jquery";
import * as ko from "knockout";
import * as pdfjsLib from "pdfjs-dist";

export var MyViewModel = function (this: any, initUrl: string) {
  var self = this;
  self.UrlValue= ko.observable(initUrl);

  self.UrlValue.subscribe(function (newValue: string) {
    self.showPdfPreview(newValue);
  });

  self.showPdfPreview = function (url: string) {
    var loadingTask = pdfjsLib.getDocument(url);
    ...
  }
}

TypeScript使用以下导入将其编译为test.js

代码语言:javascript
复制
define(["require", "exports", "jquery", "knockout", "pdfjs-dist"], function (require, exports, $, ko, pdfjsLib) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });

如果我尝试使用它,就会得到以下错误:TypeError: pdfjsLib is undefined 如何修复?

RequireJs基本上配置如下:

代码语言:javascript
复制
<script src="~/lib/requirejs/dist/require.js"></script>
<script>
    require.config({
        baseUrl: "/",
        paths: {
            "jquery": "lib/jquery/dist/jquery-3.4.1",
            "knockout": "lib/knockout/dist/knockout-3.5.0",
            "pdfjs-dist": "lib/pdfjs/dist/build/pdf",
            "mytest": "js/test"
        },
        waitSeconds: 15
    });
    require(
        ["jquery", "knockout", "pdfjs-dist", "mytest"],
        function ($, ko, pdfjsLib, mytest) {
            var viewModel = new mytest.MyViewModel("@Model.Value");
            ko.applyBindings(viewModel);
        }
    );
</script>

我假设我必须要求pdfjsLib in test.ts。不过,我不能在那里使用require,因为TypeScript不知道这个定义。在那里导入库也不起作用,TS说它不是一个模块。我觉得我错过了什么。

EN

回答 1

Stack Overflow用户

发布于 2019-07-10 11:45:53

为了使TypeScript以ES5为目标,必须更改进口。另外,由于某种原因,pdfjs别名需要与pdfjs模块的路径相同。在我的例子中,这是pdfjs-dist/build/pdf。所以进口现在看起来是这样的:

代码语言:javascript
复制
/// <reference path="../TypeScript/@types/knockout/index.d.ts" />
import $ = require("jquery");
import pdfjsLib = require("pdfjs-dist/build/pdf");

不推荐使用引用,但我还没有找到一个可行的替代方案。

必须将RequireJs配置更改为:

代码语言:javascript
复制
<script src="~/lib/requirejs/dist/require.js"></script>
<script>
    require.config({
        baseUrl: "/",
        paths: {
            "jquery": "lib/jquery/dist/jquery-3.4.1",
            "knockout": "lib/knockout/dist/knockout-3.5.0",
            "pdfjs-dist/build/pdf": "lib/pdfjs/dist/build/pdf",
            'pdfjs-dist/build/pdf.worker': "lib/pdfjs/dist/build/pdf.worker",
            "mytest": "js/test"
        },
        waitSeconds: 15
    });
    require(
        ["knockout", "mytest"],
        function (ko, mytest) {
            var viewModel = new mytest.MyViewModel("@Model.Value");
            ko.applyBindings(viewModel);
        }
    );
</script>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56938470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档