STL 미리보기 테마 컴포넌트를 구축하려고 합니다. 이를 위해 훌륭한 자바스크립트 라이브러리 가 있지만, 테마 컴포넌트에서 어떻게 작동하게 할지 확실하지 않습니다.
이 라이브러리는 ES6가 아닌 일반 자바스크립트로 작성되어 있어, 단순히 “javascripts” 디렉토리에 넣고 가져오기(import)할 수 없다는 뜻인 것 같습니다. 맞습니까? 게다가 이 라이브러리는 스크립트 태그를 통해 가져와져야 한다는 가정에 기반한 것 같습니다.
따라서 스크립트 태그를 생성하여 문서 헤드에 추가할 수는 있지만, 라이브러리 JS 파일의 이름을 어떻게 찾습니까? 또한 이 라이브러리는 여러 JS 파일로 구성되어 있으며, 해당 파일들이 동일한 디렉토리에 사용 가능하다고 가정합니다. 나머지 라이브러리를 로드하기 위해 추가적인 스크립트 태그를 생성합니다.
그러면 이 파일들은 javascripts 디렉토리에 두어야 합니까? 아니면 자산(assets)으로 취급해야 합니까? 이와 유사한 작업을 수행하는 가장 가까운 예로 discourse-math 플러그인을 찾을 수 있지만, 가능하면 이를 테마 컴포넌트로 유지하는 것이 좋습니다.
에셋 이름은 변수로만 접근 가능한 것 같고, 실제 이름은 길고 복잡한 숫자라서 이 방법도 작동하지 않을 것 같습니다.
지금 당장 컴포넌트로 이를 구현하는 방법이 전혀 없는 것 같습니다. 그래서 당분간 nginx를 통해 JS 파일을 사이드로드하고 그 방식으로 접근할 계획입니다. 안타깝게도 이 컴포넌트는 저에게만 작동할 것 같습니다.
다른 토픽으로 이동했다가 STL이 있는 토픽으로 돌아오면 작동하지 않습니다. JavaScript 콘솔에 오류가 표시되지 않는 이유가 무엇인지 모르겠습니다. 어딘가에서 onload 관련 이상 현상에 대해 논의하는 스레드를 본 적이 있는데, 이 스크립트들이 onload를 사용하므로 관련이 있을 수도 있을까요?
이 페이지를 여러 번 읽었지만 여전히 작동하지 않습니다.
import 문으로 three.js를 로드하려고 하고 있는데, 무엇을 해도 모듈을 찾을 수 없다는 오류가 발생합니다. 이상한 점은 다른 파일들은 정상적으로 import할 수 있다는 것입니다. 또한 오류 메시지는 전혀 도움이 되지 않습니다.
어쨌든, 다음과 같은 오류가 발생합니다. 누군가 도움을 줄 수 있을까요:
작동하지 않는 import는 다음과 같습니다:
그리고 제가 받는 오류는 다음과 같습니다:
_application-547e0be66174ffd22a4d74fd8b568f6a3892a266cff18cb078c08d6357227acb.js:74333 An error occurred in the "STL previews" theme/component: Error: Could not find module `discourse/theme-17/three/build/three.module` imported from `discourse/theme-17/stlviewer/StlViewer`
at h (_ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:74612)
at _ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:74581
at _ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:74665
at _ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:74490
at require (_ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:74663)
at h (_ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:74616)
at _ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:74581
at _ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:74665
at _ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:74490
at require (_ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:74663)
(anonymous) @ _application-547e0be66174ffd22a4d74fd8b568f6a3892a266cff18cb078c08d6357227acb.js:74333
u @ _application-547e0be66174ffd22a4d74fd8b568f6a3892a266cff18cb078c08d6357227acb.js:74325
initialize @ _application-547e0be66174ffd22a4d74fd8b568f6a3892a266cff18cb078c08d6357227acb.js:74304
i.initialize @ _application-547e0be66174ffd22a4d74fd8b568f6a3892a266cff18cb078c08d6357227acb.js:7723
(anonymous) @ _ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:49335
e.each @ _ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:67724
e.walk @ _ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:67638
e.each @ _ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:67568
e.topsort @ _ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:67576
_runInitializer @ _ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:49361
runInitializers @ _ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:49333
_bootSync @ _ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:47768
domReady @ _ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:47668
n._run @ _ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:67275
n._join @ _ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:67251
n.join @ _ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:66968
f @ _ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:53760
(anonymous) @ _ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:53864
l @ _ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:3776
c @ _ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:3844
setTimeout (async)
(anonymous) @ _ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:3882
u @ _ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:3510
fireWith @ _ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:3640
fire @ _ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:3648
u @ _ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:3510
fireWith @ _ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:3640
ready @ _ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:4120
z @ _ember_jquery-36a23101c869ab0dc53fc908de69adb785731593573d32bdeef416acc1076ef4.js:4130
더 간단한 접근 방식을 시도해 보기로 했다.
단순히 iframe을 만들어 HTML 페이지를 로드하고, 그 페이지에서 미리보기가 작동하도록 모든 복잡한 스크립트 작업을 수행하게 한다. 현재는 재사용 가능한 형태로 되어 있지 않지만, 이를 플러그인으로 만드는 것은 비교적 간단할 것이다.