2017-10-13 77 views
5

BağlamPDF.js NPM modülünü ve @types bağlamaları, çalışan Node.JS kodu üreten bir şekilde yüklemek için TypeScript'i nasıl edinebilirim?

ben daktilo projeye PDF.JS içe çalışıyorum. npm install @types/pdfjs-dist ve npm install pdfjs-dist aracılığıyla yüklenen pdfjs-dist içinDefinitelyTyped kullanıyorum.

Sorun

Projemi derlemek için typescript almak gibi olamaz. DefinitelyTyped'deki testlerden doğrudan kopyalanan kaynak kodunu kullanıyorum. Bu benim derlemek çalışıyorum kodu (DefinitelyTyped test kodunun tam bir kopyası da aynı şekilde başarısız) basitleştirilmiş (sadece silme) 'dir:

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

typescript türü bildirimleri modülü bulur ve gördüğü Geçerli olmak için PDFJSStatic numaralı ithalat. Bu PDFJS hiç başlatılır düşünmüyor ama tsconfig içinde strict kapatırsanız, kod derler, ama derler: Açıkçası çalışmıyor

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

. Hiçbir şey için import ifadesini derlemiyor.

Soru

nasıl typescript projeye PDF.JS ithalat ve @types/pdfjs-dist yılında beyan dosyaları yoluyla node.js kod çalışma içine derlemek olabilir? Ben boşuna, ben import farklı çeşitlerini denedim

çalıştı ettik ne

. require'a geçiş yapmak da yardımcı gözükmüyor.

pdjs-dist bağımlılığının ve @types/pdfjs-dist bağımlılıklarının mevcut, güncellenmiş ve doğrudan NodeJS'den (TypeScript olmayan programlar) kullanılabilir olduğunu doğruladım.

tsconfig'imde module için çeşitli değerler denedim. Oluşturulan kodu bazen değiştirir, ancak hiçbiri gerekli içe aktarmayı içerecek şekilde değiştirmez.

satırının import satırının üstüne eklemeye çalıştım. Bu davranış değiştirmedi.

Çevre

tsc versiyon 2.4.2, düğüm 8.5 ve npm 5.3.

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

Aynı problemim var. – uiii

+0

Aynı sorunu yaşıyorum, bu sorunu çözmek için herhangi bir çözüm buldunuz mu? –

+0

Hello. Problem için bir çözüm buldunuz mu? Aynı problemle oturuyorum ve saçlarımı kopartıyorum. Neden bu kadar zor olmalı? –

cevap

2

Belki require işlevini kullanabilirsiniz: Benim proje kök tsconfig.json şu var.

@types/node paketleri ekleyin ve kaynak kodunuzun en üstünde require('pdfjs-dist') yazın. Yani, kodunuzu aşağıdaki gibi değiştirebilirsiniz.Şimdi, bu kod çalışacaktır.

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

Uygulamasında @types/pdfjs-dist'un sorunları olduğunu düşünüyorum.

+0

Şimdi, bu yöntem çalışmıyor. Lütfen bu @@ types/node 'değişimini görün https://github.com/DefinitelyTyped/DefinitelyTyped/commit/41e178d963a2e55106e20f423fd7f311e8632861#diff-21e9d6e91ee2c9204daebf0a94339b21 – Azoson

+1

Şimdi, bu kod çalışacaktır. 'pdfjs-dist' adresinden {PDFJSStatic} içe aktarma; const PDFJS: PDFJSStatic = gerekli ('pdfjs-dist'); PDFJS.getDocument ('helloworld.pdf') daha sonra (console.log); "@ types/pdfjs-dist" uygulamasının uygulamasında sorunları olduğunu düşünüyorum. – Azoson

0

Ayrıca farklı yollar denedim. Benim için en okunaklı olanı şuydu:

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

Bu işe yaramıyor. İsim alanı 'pdfjslib' değerini "kullanamaz" alıyorum. –