2017-02-27 16 views
8

Tôi đang cố gắng bắt đầu với Typescript để phát triển Electron. Sau khi vật lộn với việc gõ cho nút và jquery, cuối cùng tôi đã nhận lỗi tập tin .ts của tôi miễn phí.Tham chiếu không bắt buộcLỗi: xuất khẩu không được xác định trong tệp được tạo bởi Loại

Vấn đề bây giờ là khi tôi chạy ứng dụng của tôi, tôi nhận được lỗi này là:

index.js:2 Uncaught ReferenceError: exports is not defined 

Đây là hai dòng đầu tiên trong index.js:

"use strict"; 
Object.defineProperty(exports, "__esModule", { value: true }); 

Tôi không biết mà dòng đó. Typescript đã thêm nó khi biên dịch. Ứng dụng của tôi hoạt động tốt nếu tôi xóa nó.

Làm cách nào để loại bỏ lỗi này?

Oh và đây là tsconfig của tôi, nếu điều đó có liên quan.

{ 
    "compilerOptions": { 
     "target": "es6", 
     "module": "commonjs", 
     "moduleResolution": "node", 
     "isolatedModules": false, 
     "jsx": "react", 
     "experimentalDecorators": true, 
     "emitDecoratorMetadata": true, 
     "declaration": false, 
     "noImplicitAny": false, 
     "noImplicitUseStrict": false, 
     "removeComments": true, 
     "noLib": false, 
     "preserveConstEnums": true, 
     "suppressImplicitAnyIndexErrors": true 
    }, 
    "exclude": [ 
     "node_modules", 
     "typings/browser", 
     "typings/browser.d.ts" 
    ], 
    "compileOnSave": true, 
    "buildOnSave": false, 
    "atom": { 
     "rewriteTsconfig": false 
    } 
} 

Trả lời

7

Đã xảy ra sự cố với phiên bản mới của loại 2.2.1, hãy thử sử dụng phiên bản 2.1.6 cũ hơn, giải quyết vấn đề chính xác giống như bạn có cho tôi.

Phiên bản 2.2.1 khi biên dịch thêm dòng này Object.defineProperty(exports, "__esModule", { value: true }); trong khi phiên bản 2.1.6 cũ hơn không.

+0

Điều này đã hiệu quả! Đối với bất kỳ ai sử dụng Atom và gói Typecript như tôi; tải xuống bản ghi 2.1.6 qua npm (phiên bản packagename @). Sau đó đi vào nguồn của gói và thay thế thư mục typescript trong node_modules bằng một tệp bạn vừa tải xuống. – Blargmode

+0

Nhưng tại sao dòng dẫn đến hành vi sai lầm? –

+0

@ МалъСкрылевъ Hãy xem câu trả lời của Markus Hahn bên dưới: https://stackoverflow.com/a/43702240/887930 –

0

QuickFix

Thay đổi "target": "es6"-"target": "es5" trong tsconfig.json của bạn.

+7

Không hoạt động. Nó vẫn tạo ra dòng đó. – Blargmode

+0

Nó hoạt động, bạn thay đổi giá trị của '" mô-đun "' thành ví dụ '" es5 "' –

26

Tôi giải quyết nó với một hack trong HTML nhúng:

<script> var exports = {}; </script> 
<script src="index.js"></script> 

Về cơ bản đem lại cho nó những gì nó muốn, một xuất khẩu toàn cầu biến.

Với tệp tải xuống TypeScript (2.3.2) của tôi (es6).

+2

Câu trả lời này xứng đáng được chú ý hơn! cảm ơn – Kahbazi

+0

Bạn thiên tài :), Phá vỡ đầu của tôi trong 1 tuần qua để giải quyết vấn đề này. –

+0

Mặc dù đây là một hack khá, nó có lẽ là một trong những thông minh nhất tôi đã nhìn thấy cho đến nay. Tôi đoán tôi sẽ sử dụng điều này cho đến khi họ khắc phục vấn đề. –

0

Tôi đã gặp vấn đề tương tự với tệp js được tạo bởi trình biên dịch Typecript. Cùng dòng:

Object.defineProperty(exports, "__esModule", { value: true }); 

Và cùng lỗi:

game.js:2 Uncaught ReferenceError: exports is not defined 

tôi đã xác định một lớp game trong tập tin này. Tôi giải quyết vấn đề này bằng cách bổ sung này vào cuối game.ts tôi file:

export = Game; 

Với điều này, trình biên dịch nguyên cảo thay thế:

Object.defineProperty(exports, "__esModule", { value: true }); 

với:

module.exports = Game; 

Không còn lỗi cho tôi sau này.

0

Tôi gặp sự cố tương tự, tôi vừa sửa đổi systemjs.config.js tập tin như đã đề cập dưới đây

'NPM:': '/ node_modules /' - // Giá trị của nó là chỉ 'node_modules /' và tôi đã thêm '/' trong đầu

'ứng dụng': '/ src/app' - // giá trị của nó chỉ là 'ứng dụng' và như đường dẫn thư mục ứng dụng của tôi là khác nhau nên được thay đổi nó cho phù hợp

loader: '/ src/systemjs- angular-loader.js ' - // Giá trị của nó chỉ là 'systemjs-angular-loader.js' và vì vị trí của nó khác nhau trong dự án của tôi nên chỉ nó vào đúng đường dẫn

Các vấn đề liên quan