2016-10-10 15 views
5

Tôi đang cố gắng thiết lập dự án của mình để sử dụng rollup, như là một phần của việc di chuyển angular2 sang trình biên dịch AOT, tuy nhiên, tôi đang gặp vấn đề sau.'Chủ đề' không được xuất bởi rxjs trong rollup.js

Error: 'Subject' is not exported by node_modules\rxjs\Subject.js

Đây là rollup.js tôi file:

import rollup from 'rollup'; 
import nodeResolve from 'rollup-plugin-node-resolve' 
import commonjs from 'rollup-plugin-commonjs'; 
import uglify  from 'rollup-plugin-uglify' 

export default { 
    entry: 'client/main.js', 
    dest: 'public/assets/js/build.js', 
    sourceMap: false, 
    format: 'iife', 
    plugins: [ 
     nodeResolve({jsnext: true, module: true}), 
     commonjs({ 
     include: 'node_modules/rxjs/**', 
     include: 'node_modules/angular2-jwt/**', 
     }), 
     uglify() 
    ] 
} 

Tại sao điều này xảy ra, tôi đã theo hướng dẫn nấu ăn angular2?

Trả lời

8

Bạn sẽ cần phải sử dụng tùy chọn namedExports với rollup-plugin-commonjs: https://github.com/rollup/rollup-plugin-commonjs#custom-named-exports.

Ngoài ra, bạn có thể thấy nó hữu ích cho include: 'node_modules/**' thay vì gói cá nhân, nếu không thì phụ thuộc của phụ thuộc sẽ bỏ qua plugin (trong cấu hình ở trên, bạn có bản sao include thuộc tính - có lẽ đó chỉ là lỗi đánh máy? để chuyển nhiều giá trị, sử dụng mảng).

commonjs({ 
    include: 'node_modules/**', 
    namedExports: { 
    'node_modules/rxjs/Subject.js': [ 'Subject' ] 
    } 
}) 
+3

Cảm ơn bạn đã nhận xét. Điều này cung cấp cho một lỗi "xuất khẩu trùng lặp 'Chủ đề" "cho đến khi namedExport được loại bỏ. Sau đó, nó hoạt động. Cho tôi ít nhất. – DarkNeuron

+0

Thật không may điều này không hoạt động nữa – Melchia

0

Cuối cùng tôi đã tìm ra điều này trên hệ thống của mình.

Giải pháp xuất khẩu được đặt tên không đúng vì các tệp roll-plugin-commonj sẽ xử lý việc xuất trong Subject.js tốt.

Vấn đề đối với tôi là tùy chọn "bao gồm" trong danh sách các plugin phổ biến.

Có hai vấn đề.

Số một: khi chỉ định bao gồm trong các tùy chọn dưới dạng "node_modules/rxjs/**", bạn phải chắc chắn đường dẫn đầy đủ sẽ được giải quyết đến nơi bạn mong đợi.

Ví dụ:

tôi chạy build lệnh của tôi từ "c:/foo/xây dựng", nhưng tác phẩm của tôi là trong "c:/my-source" thì bao gồm mô hình có thể giải quyết để "c:/build/node_modules "có nghĩa là khi plugin commonjs đang kiểm tra xem nó có nên xử lý" node_modules/rxjs/"thì sẽ thấy rằng" c:/my-source/node_modules/rxjs/ "không khớp với" c:/build/node_modules/rxjs/** "do đó nó sẽ không chuyển đổi xuất sang ES6.

Vấn đề thứ hai là phân biệt chữ hoa chữ thường. Các mẫu bao gồm phân biệt chữ hoa chữ thường. Điều này vấp ngã tôi quá.

Cả hai sự cố này đều có thể được xác nhận bằng cách mở tệp "node_modules \ rollup-plugin-commonjs \ dist \ rollup-plugin-commonjs \ dist.js.js" và gỡ lỗi chức năng "chuyển đổi".

Nếu bạn sửa đổi mã (vào đầu rất của hàm transform) để được một cái gì đó như thế này

if (id.includes('rxjs\\Subject.js')) { 
     debugger; 
} 

và sau đó chạy mã trong một trình gỡ lỗi, bạn có thể bước qua mã cho đến khi nó được cho chức năng lọc. Ở đó bạn sẽ thấy chức năng lọc bỏ qua tập tin "rxjs/Subject.js".

Tôi gần như đảm bảo đây là sự cố khi xảy ra lỗi.

0

Tôi thấy rằng điều này có thể xảy ra kết hợp với các liên kết tượng trưng.

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