我试图在我的项目中运行一些ES6代码,但是出现了意外令牌导出错误。
export class MyClass {
constructor() {
console.log("es6");
}
}
我试图在我的项目中运行一些ES6代码,但是出现了意外令牌导出错误。
export class MyClass {
constructor() {
console.log("es6");
}
}
我曾经遇到过这个问题,花了一个小时才找到我的问题所在。
问题是我正在将我的代码从非模块化转换为模块化,但我忘记删除导入的脚本文件。
我的“table.js”文件有以下行。这是模块文件。
export function tableize(tableIdentifier) {
我的"orderinquiry.js"文件有以下行。
import { tableize, changeColumnSizesDynamic } from '../common/table.js';
我的 "orderinquiry.html" 文件有以下两行代码。
<script src='/resources/js/common/table.js'></script>
<script type='module' src='/resources/js/client/orderinquiry.js'></script>
第二行很好,声明了type='module'
。但是第一行直接链接到table.js导致了意外的错误。当我删除了第一个<script>
时,一切开始正常工作。
parent.mjs
export default class Car {
constructor(brand) {
this.carname = brand;
}
present() {
return 'I have a ' + this.carname;
}
}
child.mjs
import Car from './parent.mjs'
export default class Model extends Car {
constructor(brand, mod , country) {
super(brand);
this.model = mod;
this.country = country;
}
show() {
return this.present() + ', it is a ' + this.model + "i am from " +
this.country;
}
}
index.html
<!DOCTYPE html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0,
shrink-to-fit=no">
<title>Quick Start Pack Template</title>
</head>
<div class="demo"></div>
<script type="module">
import Model from './child.mjs'
let value = new Model("Ford", "Mustang", "bangladesh")
document.querySelector(".demo").innerHTML = value.show()
</script>
</body>
</html>
最后在实际服务器上运行此代码
require
和exports
。这个问题源于导入具有.ts
扩展名的文件。
为了解决这个问题,在你的文件中使用ES6模块导入。dist
src
|-app.ts
|-components
|-button.ts
|-helper
|-eventHander.ts
tsconfig.json
index.html
"module": "ES2015"
"outDir": "./dist"
<script type="module" src="./dist/app.js"></script>
关于模块的更多信息,请参阅:JavaScript 模块
type Handler<T> = (e: T) => void;
const eventHander: Handler<Event> = (e: Event) => {
e.preventDefault();
alert("You Clicked");
};
export default eventHander;
import eventHander from "../helper/eventHander.js"
function createButton(): HTMLElement {
let button: HTMLElement;
button = document.createElement("button");
button.addEventListener("click", eventHander);
button.innerText = "Click Me"
return button
}
export default createButton
import createButton from "./components/button.js";
const hostElement: HTMLElement = document.getElementById("app")!;
hostElement.insertAdjacentElement("beforeend", createButton());
你的HTML代码应该像这样:
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app"></div>
</body>
<script type="module" src="./dist/app.js"></script>
可能的答案
我曾经遇到过这个问题,在我的情况下,问题出在我忘记给文件添加扩展名了 << File.ts >>
在我的项目中,当我尝试导入本地JavaScript模块时,我遇到了意外的令牌导出错误。我通过在index.html文件中添加脚本标签时声明类型为模块来解决了这个问题。
<script src="./path/to/the/module/" type="module"></script>
对于那些在2022年看到这篇文章的人,我也遇到了同样的错误,但是我将我的代码更改为类似于以下内容:
module.exports = () => {
getUsers: () => users;
addUser: (user) => users.push(user);
};
// > node my.mjs
import {MyClass} from 'https://someurl'
async func () {
// return some promise
}
await func ()
使用ES6语法在Node中不起作用,不幸的是,显然你必须要有Babel才能让编译器理解export或import等语法。
npm install babel-cli --save
{ "presets": ["es2015"] }
// ✅ 使用 module.exports 而不是 export module.exports = { Person, };
我想提供一个简单的解决方案。使用const
和反引号(`)。
const model = `<script type="module" src="/"></<script>`
export
只在 ES6 中可用,而这些模块提供了 ES6 支持。 - Claiesmodule.exports = MyClass
,而不是export class MyClass
。 - onmyway133