JavaScript报错:CryptoJS is not defined的原因及解决方法
问题描述
尝试运行以下JavaScript代码时,始终抛出ReferenceError: CryptoJS is not defined错误:
var _finalScore = 9; // Final Score var _tapCount = 3; // Clicks _tapCount *= 73; var key = CryptoJS.enc.Utf8.parse('4512631236589784'); var iv = CryptoJS.enc.Utf8.parse('4512631236589784'); console.log(CryptoJS.AES.encrypt(_finalScore.toString(), key, { iv: iv }).toString()) console.log(CryptoJS.AES.encrypt(_tapCount.toString()))
错误信息:
var key = CryptoJS.enc.Utf8.parse('4512631236589784'); ^ ReferenceError: CryptoJS is not defined at Object.<anonymous> (/tmp/YA2n3rCQMJ.js:6:11) at Module._compile (internal/modules/cjs/loader.js:778:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10) at Module.load (internal/modules/cjs/loader.js:653:32) at tryModuleLoad (internal/modules/cjs/loader.js:593:12) at Function.Module._load (internal/modules/cjs/loader.js:585:3) at Function.Module.runMain (internal/modules/cjs/loader.js:831:12) at startup (internal/bootstrap/node.js:283:19) at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3)
错误原因
CryptoJS并非JavaScript内置对象,它是一个第三方加密工具库。你的代码直接调用了该库的API,但未提前完成库的引入,导致运行时无法找到CryptoJS对象,从而抛出ReferenceError。
修复方法
根据代码运行的环境,选择对应的库引入方式:
1. 浏览器环境
若在浏览器控制台或网页中运行代码,需先通过<script>标签引入CryptoJS库:
<!-- 先引入CryptoJS核心库 --> <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script> <!-- 再执行你的业务代码 --> <script> var _finalScore = 9; // Final Score var _tapCount = 3; // Clicks _tapCount *= 73; var key = CryptoJS.enc.Utf8.parse('4512631236589784'); var iv = CryptoJS.enc.Utf8.parse('4512631236589784'); console.log(CryptoJS.AES.encrypt(_finalScore.toString(), key, { iv: iv }).toString()) console.log(CryptoJS.AES.encrypt(_tapCount.toString(), key, { iv: iv }).toString()) </script>
你也可以下载CryptoJS的本地文件,将<script>标签中的URL替换为本地文件路径。
2. Node.js环境
从错误栈信息判断,你大概率是在Node.js环境运行代码,需先安装包再引入:
- 第一步:在项目目录下执行安装命令
npm install crypto-js
- 第二步:修改代码引入库
// 引入CryptoJS库 const CryptoJS = require('crypto-js'); var _finalScore = 9; // Final Score var _tapCount = 3; // Clicks _tapCount *= 73; var key = CryptoJS.enc.Utf8.parse('4512631236589784'); var iv = CryptoJS.enc.Utf8.parse('4512631236589784'); console.log(CryptoJS.AES.encrypt(_finalScore.toString(), key, { iv: iv }).toString()) console.log(CryptoJS.AES.encrypt(_tapCount.toString(), key, { iv: iv }).toString())
如果是使用ES模块的Node.js项目,可替换为import CryptoJS from 'crypto-js';语句。
额外提示
你代码中第二行CryptoJS.AES.encrypt(_tapCount.toString())缺少必要的key参数,即使引入了CryptoJS也会报错,需补充完整参数(参考第一行的调用格式)。
内容的提问来源于stack exchange,提问作者zoro
相关产品推荐
相关产品推荐

