2017-10-13 4 views
5

ContexteComment puis-je obtenir que TypeScript charge le module NPM PDF.js et les liaisons @types d'une manière qui génère du code Node.JS fonctionnel?

Je suis en train d'importer PDF.JS dans un projet dactylographié. J'utilise le DefinitelyTyped bindings pour pdfjs-dist, installé via npm install @types/pdfjs-dist et npm install pdfjs-dist.

Problème

Je ne peux pas sembler obtenir tapuscrit pour compiler mon projet. J'utilise le code source copié directement à partir des tests sur DefinitelyTyped. Ce sont les simplifiées (suppression seulement) le code que je suis en train de compiler (une copie exacte du code de test à partir DefinitelyTyped ne parvient aussi de la même manière):

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

tapuscrit trouve le module de déclarations de type, et considère la importation de PDFJSStatic pour être valide. Il ne pense pas PDFJS est toujours initialisés, mais si j'éteins strict dans tsconfig, le code compile, mais il compile à:

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

Ce qui ne fonctionne évidemment pas. Il ne compile pas l'instruction import en n'importe quoi.

Question

Comment puis-je importer PDF.JS dans un projet dactylographié et compiler en code de travail Node.JS via les fichiers de déclaration dans @types/pdfjs-dist?

Ce que j'ai essayé

J'ai essayé différentes variations sur import, en vain. Passer à require ne semble pas non plus aider.

J'ai vérifié que la dépendance pdjs-dist et les dépendances @types/pdfjs-dist sont présentes, mises à jour et utilisables directement à partir de NodeJS (programmes non-TypeScript).

J'ai essayé différentes valeurs pour module dans mon tsconfig. Ils modifient parfois le code généré, mais aucun ne le modifie pour contenir l'importation nécessaire.

J'ai essayé d'ajouter /// <reference path="../node_modules/@types/pdfjs-dist/index.d.ts" /> au-dessus de la ligne import. Cela n'a pas changé le comportement.

Environnement

tsc la version 2.4.2, noeud 8.5 et 5.3 npm. Je donne les résultats suivants tsconfig.json dans ma racine du projet:

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

J'ai le même problème. – uiii

+0

J'ai le même problème, avez-vous trouvé une solution pour résoudre ce problème? –

+0

Bonjour. Avez-vous trouvé une solution au problème? Je suis assis avec exactement le même problème, et je m'arrache les cheveux. Pourquoi cela doit-il être si difficile? –

Répondre

2

Peut-être que vous pouvez utiliser la fonction require.

Ajoutez @types/node packages et écrivez require('pdfjs-dist') en haut de votre code source. Ainsi, vous pouvez modifier votre code comme ci-dessous.

Maintenant, ce code fonctionnera.

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

Je pense que @types/pdfjs-dist a des problèmes dans son implémentation.

+0

Maintenant, cette méthode ne fonctionne pas. Veuillez voir ce changement de '@ types/node' https://github.com/DefinitelyTyped/DefinitelyTyped/commit/41e178d963a2e55106e20f423fd7f311e8632861#diff-21e9d6e91ee2c9204daebf0a94339b21 – Azoson

+1

Maintenant, ce code fonctionnera. importer {PDFJSStatic} à partir de 'pdfjs-dist'; const PDFJS: PDFJSStatic = require ('pdfjs-dist'); PDFJS.getDocument ('helloworld.pdf'). Then (console.log); Je pense que '@ types/pdfjs-dist' a des problèmes d'implémentation. – Azoson

0

J'ai aussi essayé différentes façons. Pour moi, le plus lisible était celui-ci:

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

Cela ne fonctionne pas. Je reçois 'ne peut pas utiliser l'espace de noms 'pdfjslib' comme valeur. –