2016-10-25 20 views
6

Luồng công việc của tôi cho es6 sử dụng babel và babel-plugin-transform-es2015-modules-system.js để chỉ chuyển đổi nhập/xuất mô-đun để sử dụng với system.js. Tôi chỉ đơn giản sử dụng một trình duyệt "xanh" cho tất cả các tính năng es6 ngoại trừ việc nhập/xuất các mô-đun .. đó là một tiêu chuẩn whatwg do đó không phải là "es6".es6 Nhập ba.js

Tính năng này hoạt động tốt với các thư viện cũ (non-es6), tôi có thể "nhập" tất cả các gói npm tôi cần. Bằng cách nào đó babel, chỉ với các mô-đun chuyển đổi babel, và system.js làm việc kỳ diệu.

Ngoại trừ ba.js. Tôi đã thử với cả ba bản phát hành: ba.js, three.min.js & three.modules.js. Đầu tiên hai không âm thầm, dẫn đến một mô-đun "không xác định". Thứ ba thất bại, muốn traceur .. Tôi đoán cho một biến đổi giống như system.js?

Vì vậy, tôi cần phải làm gì để sử dụng three.js trong thế giới es6 của mình?

Tôi đoán tôi chỉ có thể sử dụng thẻ <script> và thẻ toàn cầu cho ba. Hoặc có thể sử dụng rollup/webpack để loại bỏ các mô-đun?

Nhưng tôi đặt cược có giải pháp hợp lý. Sau khi tất cả, ba.js sử dụng mô-đun es6 nội bộ.

Trả lời

12

Đã xảy ra lỗi trong bản phát hành (chỉ một ngày cũ!). Tôi đã sửa nó nhưng vẫn có vấn đề. Tuy nhiên tôi đã thấy rằng đây không làm việc:

import * as THREE from 'etc/three.js' 

.. nhưng các phiên bản rõ ràng hơn,

import THREE from 'etc/three.js' 
or 
import 'etc/three.js' 

không xuất hiện để làm việc.

Hãy cho tôi biết nếu bạn grok này tốt hơn này, đó là khá ngẫu nhiên.

+0

Hãy liên kết các báo cáo lỗi, hoặc cụ thể về những gì bạn có để sửa chữa và làm thế nào. – Bergi

+1

Đó là một nhân vật vô hình, xem https://github.com/mrdoob/three.js/issues/9939. Nó đã được sửa ngay bây giờ và trong một bản phát hành mới để cài đặt npm sẽ hoạt động hoặc chỉ cần tải xuống từ liên kết phát hành mới. – backspaces

+2

Tôi cũng đã sử dụng 'import * như BA từ 'ba'', biên dịch OK với Webpack. Chúc mừng! – Bert

3

Tôi chỉ có cùng một vấn đề, nhưng nhận ra rằng BA không xuất BA mà thay vào đó là tất cả các mô-đun khác nhau. Kiểm tra phần trong file three.js với xuất khẩu:

exports.WebGLRenderTargetCube = WebGLRenderTargetCube; 
exports.WebGLRenderTarget = WebGLRenderTarget; 
exports.WebGLRenderer = WebGLRenderer; 
exports.ShaderLib = ShaderLib; 
exports.UniformsLib = UniformsLib; 
exports.UniformsUtils = UniformsUtils; 
exports.ShaderChunk = ShaderChunk; 
exports.FogExp2 = FogExp2; 
exports.Fog = Fog; 
exports.Scene = Scene; 
exports.LensFlare = LensFlare; 
exports.Sprite = Sprite; 
exports.LOD = LOD; 
exports.SkinnedMesh = SkinnedMesh; 
exports.Skeleton = Skeleton; 
exports.Bone = Bone; 
exports.Mesh = Mesh; 
exports.LineSegments = LineSegments; 
exports.Line = Line; 
exports.Points = Points; 
exports.Group = Group; 

... vv

Vì vậy, bạn có thể nhập chỉ là module bạn thực sự cần, hoặc như đã nói ở trên: nhập tất cả trong số họ qua

import * as THREE from 'three.js' 

Cheers

+0

Ngọt ngào! Tôi chạy qua đó quá trong khi cố gắng grok ba & mô-đun. Tôi đã không cố gắng chỉ cần nhập khẩu những gì tôi cần tho. Vì vậy, nếu tôi nhập khẩu Mesh, nó cũng nhập khẩu phụ thuộc của nó là tốt? I E. module transitive closure? – backspaces

+0

Tôi đã tra cứu thuật ngữ kết thúc chuyển tiếp, nhưng tôi thực sự không hiểu ý của bạn trong bối cảnh đó. Anway đây là một câu hỏi hay cho dù nó sẽ nhập khẩu các phụ thuộc. Tôi đã cố gắng tìm ra nó bằng cách xem mã, nhưng tôi vẫn không chắc chắn.Tôi có xu hướng nghĩ rằng nó không, ít nhất là không có nhập khẩu trong tập tin. Có thể xuất tất cả các mô-đun thay vì một điều lớn, chỉ cung cấp cho bạn quyền truy cập dễ dàng hơn vào các phần khác nhau của ba: ví dụ: qua 'THREE.Mesh() mới'. Nhưng tôi muốn biết sự thật. Vì vậy, hãy cho tôi biết, khi bạn đã thử nghiệm nó. – Merc

+0

Cảm ơn sự quan tâm và thông tin! Và xin lỗi vì có thể không đúng (!) Sử dụng đóng cửa chuyển tiếp :). Tất cả tôi có nghĩa là một nhập khẩu sẽ kéo trong tất cả các phụ thuộc của nhập khẩu đó và tất cả các phụ thuộc của họ, và như vậy. Toàn bộ "đồ thị" của các phụ thuộc. Tôi đã xem package.json và rất vui khi thấy chúng không có phụ thuộc thời gian chạy, chỉ xây dựng các phụ thuộc. Và kiểm tra tệp nguồn một cách ngẫu nhiên, nó có cả báo cáo nhập và xuất: https://github.com/mrdoob/three.js/blob/dev/src/core/DirectGeometry.js – backspaces