NodeJS模块导入报错:无法解析标识符,如何使用tonweb?
解决浏览器端导入tonweb和@orbs-network/ton-access的问题
方法一:使用正确的CDN ES模块导入
你之前用的CDN路径不对,tonweb的ES模块入口并非src/index.min.js,需使用官方编译好的ES模块版本,同时调整导入方式适配包的导出结构:
导入tonweb
在app.js中使用正确的CDN路径,按需选择导入方式:// 导入整个tonweb模块 import * as TonWeb from 'https://cdn.jsdelivr.net/npm/tonweb@0.0.62/dist/tonweb.es.min.js'; // 或直接导入核心类 import { TonWeb } from 'https://cdn.jsdelivr.net/npm/tonweb@0.0.62/dist/tonweb.es.min.js';导入@orbs-network/ton-access
同样使用ES模块版本的CDN路径:import { getHttpEndpoint } from 'https://cdn.jsdelivr.net/npm/@orbs-network/ton-access@2.3.0/dist/index.esm.min.js';注意:尽量指定稳定版本号,避免CDN路径指向未兼容ES模块的包版本。
方法二:通过打包工具处理依赖(推荐生产环境)
浏览器原生无法解析Node.js模块规范,直接导入node_modules会触发404(Express默认不暴露该目录),推荐用打包工具将依赖打包到前端代码中:
初始化并安装依赖
在项目目录执行:npm init -y npm install tonweb @orbs-network/ton-access用Vite快速打包
- 安装Vite:
npm install vite --save-dev - 创建
vite.config.js,配置打包输出到public/js:import { defineConfig } from 'vite'; export default defineConfig({ build: { outDir: './public/js', rollupOptions: { input: './src/app.js', // 将原app.js移至src目录 output: { entryFileNames: 'app.bundle.js', }, }, }, }); - 修改
index.html引入打包后的文件:<script type="module" src="/js/app.bundle.js"></script> - 执行打包:
npx vite build,之后启动Express服务即可。
- 安装Vite:
方法三:配置Express暴露node_modules(仅本地测试)
若仅用于本地测试,可让Express将node_modules设为静态目录:
在index.cjs中添加:
const express = require('express'); const app = express(); // 暴露node_modules目录 app.use('/node_modules', express.static('node_modules')); app.use(express.static('public')); app.listen(3000, () => console.log('Server running on port 3000'));
然后在app.js中用相对路径导入:
import * as TonWeb from '/node_modules/tonweb/dist/tonweb.es.min.js'; import { getHttpEndpoint } from '/node_modules/@orbs-network/ton-access/dist/index.esm.min.js';
此方法会暴露整个node_modules目录,存在安全风险,禁止用于生产环境。
内容的提问来源于stack exchange,提问作者ezburbon
相关产品推荐
相关产品推荐

