You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node ES6环境下如何通过package.json脚本调用export default内容

问题根因

执行脚本无输出、后续尝试的写法报错,核心是对ES模块的加载、导出规则理解有偏差:

  • 直接运行node src/weekday.js时,模块仅完成加载,你通过export default导出的异步函数只是模块对外暴露的成员,不会自动执行,文件里没有任何主动调用函数的代码,自然不会打印日志
  • 动态import()返回的是Promise对象,resolve后得到的是包含所有导出成员的模块对象,不是你导出的default函数本身,直接加()调用必然报类型错误
  • 项目开启"type": "module"后,所有.js文件默认按ES模块规范解析,无法用CommonJS的require()直接加载,会抛出规范不兼容的错误
正确配置方案

二选一即可:

方案1:给脚本添加入口执行判断(最推荐,适配CLI场景)

这种写法不需要改npm scripts配置,还能兼容模块被其他文件import引用的场景,不会重复执行逻辑。直接修改src/weekday.js,在文件末尾添加自执行判断即可:

#! /usr/bin/env node

export const mon = () => console.log('Monday')

export const tues = () => console.log('Tuesday')

export const wed = () => console.log('Wednesday')

const main = async () => {
  await mon()
  await tues()
  await wed()
}
export default main

// 新增:判断当前文件是被直接执行时,才运行主逻辑
if (import.meta.url === new URL(process.argv[1], 'file:').href) {
  main()
}

修改后保留原来的scripts配置即可:

"scripts": {
  "week": "node src/weekday.js"
}

执行npm run week就能正常依次输出Monday、Tuesday、Wednesday。

方案2:不修改源文件,直接在npm script中完成调用

如果不想改动weekday.js的源码,可以把scripts配置改成正确处理动态import的写法:

"scripts": {
  "week": "node -e 'import(\"./src/weekday.js\").then(module => module.default())'"
}

这种写法的逻辑是:动态加载模块后,从返回的模块对象中取出default导出的函数,再执行调用。注意这种写法在Windows cmd环境下可能遇到引号转义问题,跨平台使用优先选方案1。


内容的提问来源于stack exchange,提问作者GʀᴜᴍᴘʏCᴀᴛ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 00:18:20