2016-12-09 15 views
5

Tôi đang cố gắng nhập mô-đun vào tệp bản ghi và sau đó gói với Rollup.js.Lỗi: Chuyển nhượng bất hợp pháp để nhập

Nhưng tôi nhận được một thông báo lỗi ngăn không cho Rollup hoàn tất.

Việc nhập khẩu:

import * as mapboxgl from 'mapbox-gl'; 

(mapboxgl as any).accessToken = this.accessToken; 
this.map = new mapbox.Map({...}); 

Khi tôi chạy tsc không có bất kỳ thông báo lỗi, nhưng sau đó khi tôi chạy:

$ rollup -c rollup.config.js 

Illegal reassignment to import 'mapboxgl' 
Error: Illegal reassignment to import 'mapboxgl' 
at error (C:\Users\m.wilson\AppData\Roaming\npm\node_modules\rollup\src\utils\error.js:2:14) 
at disallowIllegalReassignment (C:\Users\m.wilson\AppData\Roaming\npm\node_modules\rollup\src\ast\nodes\shared\disallowIllegalReassignment.js:9:4) 
at Node.bind (C:\Users\m.wilson\AppData\Roaming\npm\node_modules\rollup\src\ast\nodes\AssignmentExpression.js:12:3) 
at C:\Users\m.wilson\AppData\Roaming\npm\node_modules\rollup\src\ast\Node.js:6:34 
at Node.eachChild (C:\Users\m.wilson\AppData\Roaming\npm\node_modules\rollup\src\ast\Node.js:21:5) 
at Node.bind (C:\Users\m.wilson\AppData\Roaming\npm\node_modules\rollup\src\ast\Node.js:6:8) 
at Node.bind (C:\Users\m.wilson\AppData\Roaming\npm\node_modules\rollup\src\ast\nodes\BlockStatement.js:8:9) 
at Node.bind (C:\Users\m.wilson\AppData\Roaming\npm\node_modules\rollup\src\ast\nodes\FunctionExpression.js:7:13) 
at C:\Users\m.wilson\AppData\Roaming\npm\node_modules\rollup\src\ast\Node.js:6:34 
at Node.eachChild (C:\Users\m.wilson\AppData\Roaming\npm\node_modules\rollup\src\ast\Node.js:21:5) 
Type rollup --help for help, or visit https://github.com/rollup/rollup/wiki 

tôi đã thu hẹp xuống rằng lỗi chỉ xảy ra khi (mapboxgl as any).accessToken = this.accessToken; là món quà.

rollup.config.js của tôi trông như thế này:

export default { 
    moduleName: "mapbox.core", 
    entry: 'src/js/index.js', 
    format: 'umd', 
    dest: 'core/core.umd.js', 
    sourceMap: true, 
    globals: { 
    'mapbox-gl': 'mapboxgl' 
    } 
}; 
+0

Hãy xem https://github.com/rollup/rollup/issues/436 –

+0

@OweRReLoaDeD Tôi nghĩ vấn đề của tôi khác, hãy xem câu trả lời của tôi về cách khắc phục sự cố –

Trả lời

1

Khá khó chịu và không thực sự chắc chắn lý do tại sao nó phải được thực hiện theo cách này, nhưng tôi cố gắng tránh các lỗi và vẫn nhận được mapbox-gl module để làm việc bằng cách sử dụng một gán chức năng để thiết lập accessToken trên mapboxgl

Vì vậy, tôi đã thay đổi:

import * as mapboxgl from 'mapbox-gl'; 

(mapboxgl as any).accessToken = this.accessToken; 
this.map = new mapbox.Map({...}); 

để này:

import * as mapboxgl from 'mapbox-gl'; 

this.assign(mapbox, "accessToken", this.accessToken); 
this.map = new mapbox.Map({...}); 

/* 
* 
* credit to this answer for the assign function: 
* http://stackoverflow.com/a/13719799/2393347 
* 
*/ 
private assign(obj: any, prop: any, value: any) { 
    if (typeof prop === "string") 
     prop = prop.split("."); 

    if (prop.length > 1) { 
     var e = prop.shift(); 
     this.assign(obj[e] = 
       Object.prototype.toString.call(obj[e]) === "[object Object]" 
       ? obj[e] 
       : {}, 
      prop, 
      value); 
    } else 
     obj[prop[0]] = value; 
} 
Các vấn đề liên quan