2017-10-13 85 views
5

KontekstSkąd mogę pobrać TypeScript do ładowania modułu NPM PDF.js i wiązań @types w sposób, który generuje działający kod Node.JS?

próbuję zaimportować do projektu PDF.JS maszynopis. Używam DefinitelyTyped bindings dla pdfjs-dist, zainstalowanego za pośrednictwem npm install @types/pdfjs-dist i npm install pdfjs-dist.

Problem

I nie wydają się uzyskać maszynopis do kompilowania mojego projektu. Używam kodu źródłowego skopiowanego prosto z testów na DefinitelyTyped. Jest to uproszczony (delecji tylko) kod Próbuję skompilować (dokładną kopią kodu testowego z DefinitelyTyped również nie w ten sam sposób):

import { PDFJSStatic } from 'pdfjs-dist'; 
var PDFJS: PDFJSStatic; 
PDFJS.getDocument('helloworld.pdf').then(console.log); 

maszynopis znajdzie moduł deklaracje typu, i uważa, że import PDFJSStatic jest ważny. To nie myśleć PDFJS kiedykolwiek zainicjowany, ale jeśli mogę wyłączyć strict w tsconfig, kod kompiluje, ale kompiluje do:

"use strict"; 
exports.__esModule = true; 
var PDFJS; 
PDFJS.getDocument('helloworld.pdf').then(console.log); 

co oczywiście nie działa. To nie kompiluje oświadczenia import w nic.

Pytanie

Jak mogę zaimportować PDF.js do projektu maszynopis i skompilować go do pracy kod node.js poprzez pliki deklaracji w @types/pdfjs-dist?

Co Próbowałem

Próbowałem różne wariacje na import, bezskutecznie. Przełączanie na require również nie pomaga.

Sprawdziłem, czy zależność pdjs-dist i zależności @types/pdfjs-dist są obecne, zaktualizowane i można je wykorzystać bezpośrednio z NodeJS (programy inne niż TypeScript).

Próbowałem różnych wartości dla module w moim tsconfig. Czasami zmieniają wygenerowany kod, ale żaden z nich nie zmienia tego, aby zawierał potrzebny import.

Próbowałem dodać /// <reference path="../node_modules/@types/pdfjs-dist/index.d.ts" /> powyżej linii import. To nie zmieniło zachowania.

Środowisko

tsc wersja 2.4.2, węzeł 8,5 i npm 5.3. Mam następujący tsconfig.json w moim domowym projektu:

{ 
    "compilerOptions": { 
     "allowJs":true, 
     "rootDir": ".", 
     "outDir": "dist", 
     "moduleResolution": "node" 
    }, 
    "include": [ 
     "src/**/*" 
    ], 
    "exclude": [ 
     "**/*.spec.ts", 
     "dist/**/*" 
    ] 
} 
+1

Mam ten sam problem. – uiii

+0

Mam ten sam problem, czy znalazłeś jakieś rozwiązanie, aby rozwiązać ten problem? –

+0

Witam. Czy znalazłeś rozwiązanie tego problemu? Siedzę z tym samym problemem i wyrywam sobie włosy. Dlaczego to musi być takie trudne? –

Odpowiedz

2

Być może używać require funkcję.

Dodaj pakiety @types/node i wpisz require('pdfjs-dist') u góry kodu źródłowego. Możesz zmodyfikować swój kod, jak poniżej.

Teraz ten kod będzie działał.

import { PDFJSStatic } from 'pdfjs-dist'; 
const PDFJS: PDFJSStatic = require('pdfjs-dist'); 
PDFJS.getDocument('helloworld.pdf').then(console.log); 

Myślę, że @types/pdfjs-dist ma problemy z jego realizacją.

+0

Ta metoda nie działa. Zobacz tę zmianę '@ types/node' https://github.com/DefinitelyTyped/DefinitelyTyped/commit/41e178d963a2e55106e20f423fd7f311e8632861#diff-21e9d6e91ee2c9204daebf0a94339b21 – Azoson

+1

Teraz ten kod będzie działał. importuj {PDFJSStatic} z "pdfjs-dist"; const PDFJS: PDFJSStatic = require ("pdfjs-dist"); PDFJS.getDocument ("helloworld.pdf"). Then (console.log); Myślę, że '@ types/pdfjs-dist' ma problemy z implementacją. – Azoson

0

Próbowałem również na różne sposoby. Dla mnie najbardziej czytelny był ten:

import * as pdfjslib from 'pdfjs-dist'; 
let PDFJS = pdfjslib.PDFJS; 
PDFJS.disableTextLayer = true; 
PDFJS.disableWorker = true; 
+0

To nie działa. Otrzymuję 'nie można używać przestrzeni nazw 'pdfjslib' jako wartość." –