HTML+JS项目npm安装paper.js后import引入类报Unexpected token错误
问题原因
- 你给引入
svg.js的script标签设置了type="text/paperscript"属性,这类脚本是由Paper.js内置的解析器执行的,不支持ES6模块的import语法,解析器读到import语句的花括号位置就会抛出语法错误,也就是你看到的Unexpected token (1:7)。 - VS Code的自动修复属于误判:编辑器静态检测到你使用了未声明的
Point类,默认按原生ES模块的逻辑自动补了import语句,但完全没有识别到你当前用的是PaperScript的特殊运行环境,补的代码本身就不符合运行时的语法规则。 - 你已经在HTML中通过普通script标签全局加载了
paper-full.js,在PaperScript执行环境下,Point/Path等所有Paper.js核心API本来就会被默认注入到当前脚本的作用域,完全不需要手动import导入。
解决方法
两种方案二选一即可,不要混写:
方案1:继续使用PaperScript模式(改动最小)
- 直接删除
svg.js第一行的import语句即可,不需要额外引入Paper.js相关类。 - 修正后的
svg.js基础代码:
var pois = [] ; $(function() { // PaperScript环境下Point可直接调用 new Point(); });
方案2:改用原生ES模块模式(更符合现代前端写法)
- 修改HTML中引入
svg.js的script标签,去掉text/paperscript类型,改为ES模块类型:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>POI</title> <script type="text/javascript" src="node_modules/paper/dist/paper-full.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script type="module" src="js/svg.js"></script> <link rel="stylesheet" href="css/style.css"> </head> <body> <canvas id="canvas" resize></canvas> </body> </html>
- 修改
svg.js代码,按ES模块规则引入依赖,手动初始化Paper.js绑定画布:
import paper from '../node_modules/paper/dist/paper-full.js'; // 从paper实例上解构出需要的类 const { Point } = paper; var pois = []; // 手动绑定canvas元素 paper.setup(document.getElementById('canvas')); $(function() { new Point(); });
注意:如果选方案2,后续所有Paper.js的API都要从paper实例上获取,不能直接调用全局的Paper类,否则会报错。
内容的提问来源于stack exchange,提问作者Mohit H
相关产品推荐
相关产品推荐

