首页 n8n教程 n8n Code环境配置:外部NPM包安装与Moment日期库(附:MD5加密算法实现)

n8n Code环境配置:外部NPM包安装与Moment日期库(附:MD5加密算法实现)

作者: Dr.n8n 更新时间:2025-12-19 03:00:41 分类:n8n教程

为什么你的 n8n Code 节点总报“moment is not defined”?

上周帮一家跨境电商客户调试订单自动化流程时,他们卡在一个看似简单的问题上:想用 Code 节点把 UTC 时间转成北京时间,结果一运行就报错 ReferenceError: moment is not defined。团队里三位工程师轮番上阵,有人改路径、有人重装节点,折腾三小时无果——其实,问题根本不在代码逻辑,而是他们忘了在 n8n 的沙箱环境里安装外部依赖。

💡 Dr. n8n 提醒:n8n 的 Code 节点默认是“纯净沙盒”,不预装任何第三方库。就像你租了个空房子,想用微波炉?得自己买。

外部 NPM 包安装:三步打通“依赖任督二脉”

别被“NPM 包”这个词吓到。你可以把它想象成“乐高积木包”——官方提供基础零件(如 JSON 解析),但你要搭个带钟表的城堡,就得额外买“时刻积木包(moment)”或“密码锁积木包(crypto-js)”。

  1. 进入设置:登录 n8n 后台 → 点击左下角齿轮图标 → 找到 “External Libraries” 栏目。
  2. 添加依赖:在输入框中键入 momentcrypto-js,点击 “+ Add” 按钮。
  3. 重启生效:保存后,系统会提示重启 n8n 实例(如果是自托管版)。云版本通常自动热更新。

⚠️ 注意:部分企业防火墙会拦截 NPM 下载请求。若添加失败,请检查网络策略或使用公司内部镜像源(如淘宝 NPM 镜像)。

实战案例一:用 Moment.js 让时间“说人话”

假设你从 Shopify Webhook 收到订单创建时间 2024-06-15T03:30:00Z,老板却要求报表显示“2024年6月15日 上午11:30(北京时间)”。这时,Moment 就是你的翻译官:

// 在 Code 节点中粘贴以下代码
const moment = require('moment');

// 假设 input 是来自前一个节点的 UTC 时间字符串
const utcTime = $input.item.json.created_at;

// 转换为北京时间(UTC+8)并格式化
const beijingTime = moment.utc(utcTime).add(8, 'hours').format('YYYY年M月D日 HH:mm');

return {
  json: {
    ...$input.item.json,
    display_time: beijingTime
  }
};

这段代码的核心逻辑是:先声明时区身份(UTC),再手动加8小时,最后按中文习惯输出。比原生 Date 对象更直观、更少踩坑。

实战案例二:用 Crypto-JS 给敏感数据“上锁”

客户数据、API 密钥、临时令牌……这些字段直接明文存储太危险。我们可以用 MD5(虽非最安全,但够轻量)生成摘要值用于日志追踪或简易校验:

const CryptoJS = require('crypto-js');

// 假设要加密用户手机号
const phone = $input.item.json.user_phone;

// 生成 MD5 摘要(16进制小写)
const md5Hash = CryptoJS.MD5(phone).toString();

return {
  json: {
    ...$input.item.json,
    phone_md5: md5Hash
  }
};

📌 应用场景举例:当客服需要核对用户身份时,系统可展示 MD5 后四位(如 ...a3f9),而非完整手机号,兼顾效率与隐私。

避坑指南:Dr. n8n 的三条血泪经验

  • 不要装太重的包:比如 lodash 全家桶。Code 节点每次执行都会加载依赖,体积过大会拖慢整个工作流。推荐按需引入,如只装 lodash.get
  • 注意版本冲突:如果你同时用了多个依赖,且它们内部依赖了不同版本的同一底层库(如不同版本的 moment),可能引发诡异错误。建议统一锁定版本号,如 moment@2.29.4
  • 本地开发 ≠ 线上环境:在本地测试通过的代码,部署到生产环境可能因缺少依赖而崩溃。务必在“External Libraries”页面确认所有包都已登记。

总结:让 Code 节点从“玩具”变“生产力工具”

掌握外部 NPM 包的安装与调用,等于给你的 n8n 工作流装上了“外挂引擎”。无论是时间处理、数据加密、文本解析还是 AI 推理(没错,你甚至可以装 @tensorflow/tfjs),只要 NPM 仓库有的,你都能用。记住这个公式:痛点需求 + 合适的 NPM 包 + 正确配置 = 自动化自由

你在 Code 节点里踩过哪些“依赖缺失”的坑?或者你用过哪些冷门但好用的 NPM 包?欢迎在评论区分享,我会挑三个最有价值的案例,送你《n8n 高阶函数速查手册》电子版一份!