2016-10-25 4 views
6

Мой рабочий процесс для es6 использует babel и babel-plugin-transform-es2015-modules-system.js только для Импорт/экспорт модуля преобразования для использования с system.js. Я просто использую «зеленый» браузер для всех функций es6, кроме импорта/экспорта модулей .. которые являются стандартом whatwg, таким образом, не «es6».es6 Импорт of three.js

Это хорошо работает с библиотеками (не-es6), я могу «импортировать» все необходимые мне пакеты npm. Каким-то образом babel, только модули babel преобразуются, и system.js волшебным образом работает.

За исключением трех .js. Я попробовал это со всеми тремя релизами: three.js, three.min.js & three.modules.js. Первые два сбой молча, что приводит к «неопределенному» модулю. Третий терпит неудачу, желая отслеживать .. Я предполагаю, что для system.js-подобного преобразования?

Итак, что мне нужно сделать, чтобы использовать three.js в моем мире es6?

Я думаю, я мог бы использовать тег <script> и глобальный для трех. Или, возможно, использовать rollup/webpack для устранения модулей?

Но я уверен, что есть разумное решение. В конце концов, three.js использует внутренние модули es6.

ответ

12

В выпуске произошла ошибка (только один день!). Я исправил его, но все еще имел проблемы. Я тем не менее считаю, что это действительно работает:

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

.. но более очевидные версии,

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

, кажется, не работает.

Дайте мне знать, если вы заберете это лучше, чем это, что довольно случайно.

+0

свяжите отчет об ошибке, или конкретно о том, что нужно было исправить и как. – Bergi

+1

Это был невидимый персонаж, см. Https://github.com/mrdoob/three.js/issues/9939. Это исправлено сейчас и в новом выпуске, поэтому npm install должен работать или просто загружаться из новой ссылки release. – backspaces

+2

Я также использовал 'import * как THREE из 'three'', который компилирует OK с помощью Webpack. Ура! – Bert

3

У меня была такая же проблема, но я понял, что ТРИ не экспортирует ТРИ, а вместо этого все разные модули. Проверьте раздел в файле three.js с экспортом:

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; 

... и т.д.

Таким образом, вы можете импортировать только те модули, которые вы на самом деле нужно, или, как сказано выше: импорт всех из них через

import * as THREE from 'three.js' 

Приветствиях

+0

Sweet! Я тоже натолкнулся на это, пытаясь найти три и модули. Я не пробовал просто импортировать то, что мне нужно. Итак, если я импортирую Mesh, он также импортирует свои зависимости? То есть переходное замыкание модуля? – backspaces

+0

Ну, я посмотрел на термин транзитивное закрытие, но я не совсем понимаю, как вы это понимаете в этом контексте. В любом случае это хороший вопрос, будет ли он импортировать зависимости. Я попытался выяснить это, взглянув на код, но я все еще не уверен.Я склонен думать, что этого не происходит, по крайней мере, в файле нет импорта. Возможно, экспортировать все модули вместо одной большой вещи, просто дает вам более легкий доступ к различным частям трех: например. через 'new THREE.Mesh()'. Но мне было бы интересно узнать факты. Поэтому, пожалуйста, скажите мне, когда вы его протестировали. – Merc

+0

Спасибо за интерес и информацию! И извините за возможное неправильное (!) Использование транзитивного закрытия :). Все, что я имею в виду, это то, что импорт будет перетаскивать все зависимости этого импорта и всех их зависимостей и т. Д. Весь «график» зависимостей. Я посмотрел на package.json и был рад видеть, что у них нет зависимостей во время выполнения, только создайте зависимости. И, проверяя исходный файл наугад, у него были как импортные, так и экспортные инструкции: https://github.com/mrdoob/three.js/blob/dev/src/core/DirectGeometry.js – backspaces

Смежные вопросы