#javascript #python #html #flask #three.js
Вопрос:
У меня есть Html-страница с частью javascript, в которую я включаю некоторые другие файлы .js :
<script type="module">
import * as THREE from "../build/three.module.js";
import { OrbitControls } from './jsm/controls/OrbitControls.js';
import { STLExporter } from './jsm/exporters/STLExporter.js';
import { STLLoader } from './jsm/loaders/STLLoader.js';
import { GUI } from './jsm/libs/dat.gui.module.js';
...
Он отображает то, что я хочу, когда я открываю свою html-страницу в браузере.
Проблема возникает, когда я хочу запустить эту html-страницу на своем локальном сервере с помощью Flask.
Это не работает, если я не изменяю импорт : он не находит файлы, поэтому я попытался создать статический репозиторий, в который я помещаю репозиторий jsm и использую url_for() следующим образом :
<script type="module">
import * as THREE from "../build/three.module.js";
import { OrbitControls } from "{{ url_for('static',filename='jsm/controls/OrbitControls.js') }}";
import { STLExporter } from "{{ url_for('static',filename='jsm/exporters/STLExporter.js') }}";
import { STLLoader } from "{{ url_for('static',filename='jsm/loaders/STLLoader.js') }}";
import { GUI } from "{{ url_for('static',filename='jsm/libs/dat.gui.module.js') }}";
Похоже, это работает для статических файлов : он находит статические файлы
Тем не менее, это не работает для three.module.js файл, который находится в репозитории сборки.
Я даже пытался поместить его в статический репозиторий или использовать url_for() для этого импорта…
Но все, что я пытался, похоже, не работает.
Может ли у кого-нибудь быть идея о том, как я могу импортировать этот модуль, полезный для threejs ?
Большое спасибо
Ответ №1:
Переместите three.module.js в папке static/jsm и импортируйте ее следующим образом:
<script type="text/javascript" src="{{ url_for('static',filename='js/three.module.js') }}"></script>
Комментарии:
1. Да, папка сборки находится на том же уровне, что и статическая папка. Но проблема, похоже, не в пути, так как я попытался представить весь путь так D:/…/build/three.module. js и это не работает так хорошо.
2. Попробуйте переместить его в статический каталог и импортировать следующим образом:
<script type="module" src="{{ url_for('static',filename='jsm/three.module.js') }}"></script>
3. или если браузер вернет ошибку: Не удалось загрузить сценарий модуля: Ожидался сценарий модуля JavaScript, но сервер ответил типом MIME «текст/обычный» , попробуйте с:
<script type="text/javascript" src="{{ url_for('static',filename='js/three.module.js') }}"></script>
4. Я импортировал, как вы предлагали :
<script type="module" src="{{ url_for('static',filename='three.module.js') }}"></script>
и он возвращает мне это :127.0.0.1 - - [28/May/2021 13:03:20] "GET /static/three.module.js HTTP/1.1" 200 -
поверх ответа, но он также отображает это :127.0.0.1 - - [28/May/2021 13:03:21] "GET /build/three.module.js HTTP/1.1" 404 -
но другого импорта нет5. Вы уверены, что других импортных товаров нет? Потому что я попробовал это с помощью:
<script type="text/javascript" src="{{ url_for('static',filename='js/three.module.js') }}"></script>
и, похоже, он импортирует его правильно. Вы также можете попытаться очистить кэш вашего браузера.