Я начинаю новый проект, в котором я хотел бы иметь модули стиля ES6, однако я не могу заставить его работать в браузере. Я использую Chrome.
Я выделил проблему на несколько строк кода.
Вот мои 2 файла TypeScript:
app.ts
import { Component } from './component';
var component: Component = new Component();
component.ts
export class Component {
}
Вот как они компилируются на JavaScript:
app.js
import { Component } from './component';
var component = new Component();
component.js
export class Component {
}
Мой index.html содержит только тег скрипта. Я попробовал несколько вариантов, но никто из них не работал.
index.html # 1
<script src="src/app.js" type="module"></script>
Сценарий не загружен. (Нет запроса на вкладке в сети)
index.html # 2
<script src="src/app.js" type=module></script>
Сценарий не загружен. (Нет запроса на вкладке в сети)
index.html # 3
<script src="src/app.js"></script>
Uncaught SyntaxError: Неожиданный токен {
Я использую tsc для пересылки TypeScript с помощью кода Visual Studio.
tasks.json
{
"version": "2.0.0",
"tasks": [
{
"type": "typescript",
"tsconfig": "tsconfig.json",
"problemMatcher": [
"$tsc"
],
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"reveal": "silent"
}
}
]
}
tsconfig.json
{
"compilerOptions": {
"target": "es6",
"sourceMap": false,
"removeComments": false,
"noImplicitReturns": true,
"noImplicitAny": true,
"preserveConstEnums": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"outDir": "../src/"
},
"exclude": [
"logs",
"node_modules"
]
}
Честно говоря, я думаю, что это хороший вопрос, потому что JS
широко используется как на стороне сервера, так и на стороне клиента, что способствует уже существующей путанице среди разработчиков
Ясно, что ваш TS
код написан как серверный код (возможно, на Node.js
). Попытка запустить его (как есть) на стороне клиента... ну.. сложно. Причина. Синтаксис, который вы используете в своем коде, должен выполняться на стороне сервера (а не на стороне клиента). Есть ли обходной путь? Ну да!
Хорошие новости:
JS ES6
имеет собственный загрузчик модулей! (проверьте MDN)
Плохие:
Node.js
(при экспорте модуля)Некоторые дополнительные примечания:
Как вы видите, нет быстрого или простого ответа на ваш вопрос.. но это может быть хорошей отправной точкой для улучшения ваших знаний и создания лучших современных веб-приложений.
ОБНОВИТЬ
В соответствии с запросом я создал небольшую демонстрацию песочницы, в которой показано, как использовать собственный модуль ES6 (https://codesandbox.io/s/oj2rwm9v35)
index.html
<html>
<body>
<div id="app"></div>
<script type="module" src="src/primary.js"></script>
</body>
</html>
primary.js
import test from "./test";
test();
test.js
export default function test() {
document.querySelector("#app").textContent = "Hello JS module!";
}
require
(и правильно его настроить) или просто решить использовать средство запуска задач, чтобы помочь вам преобразовать TS в единый минимизированный JS-файл, подходящий для клиентской среды