如何将.mjs文件转换为.js文件?解决主机不支持.mjs的问题
将.mjs转换为兼容主机的.js文件的方案
针对你把PDF.js封装进WordPress插件的场景,这里有几个实用的解决方法,不需要用户升级主机:
1. 用打包工具构建通用.js版本
这是处理大型库(比如PDF.js)最可靠的方式,通过打包工具把ES模块(.mjs)转换成浏览器/Node.js通用的非模块格式(如IIFE、UMD)。
以Rollup为例,操作步骤:
- 准备好PDF.js的源码(克隆仓库或拿到你使用的.mjs文件集合)
- 创建
rollup.config.js配置文件:
import resolve from '@rollup/plugin-node-resolve'; import commonjs from '@rollup/plugin-commonjs'; export default { input: 'src/main.mjs', // 替换为PDF.js的主入口文件路径 output: { file: 'dist/pdf.bundle.js', format: 'iife', // 生成可直接通过<script>引入的立即执行函数 name: 'PDFJS' // 全局变量名,方便在插件代码中调用PDF.js的API }, plugins: [resolve(), commonjs()] // 处理模块依赖和CommonJS转换 };
- 安装依赖:
npm install rollup @rollup/plugin-node-resolve @rollup/plugin-commonjs --save-dev - 执行打包:
npx rollup -c
打包完成后,pdf.bundle.js就是可以直接在WordPress插件中使用的.js文件,不需要主机支持.mjs。
如果习惯用Webpack,只需把输出格式配置为umd,同样能生成兼容的通用版本。
2. 直接使用PDF.js官方预构建的非模块版本
PDF.js官方已经提供了无需ES模块支持的预构建包,你可以直接下载使用:
- 查找PDF.js发布包中带有
legacy标签的版本,这类包已经打包成了传统的.js文件,直接用<script>标签引入即可,无需自己处理转换。
3. 手动修改模块语法(仅适合小型文件)
如果是少量简单的.mjs文件,可以手动将ES模块语法改为全局变量或CommonJS格式:
- 将
import { xxx } from './module.mjs'改为依赖全局变量的形式,或者把export内容挂载到window对象上:
示例:// 原.mjs export function renderPDF() { /* ... */ } // 修改后的.js window.PDFJS = window.PDFJS || {}; window.PDFJS.renderPDF = function() { /* ... */ };
但注意:这种方法不适用于PDF.js这类依赖复杂的大型库,手动修改极易出错。
内容的提问来源于stack exchange,提问作者TwisterMc
相关产品推荐
相关产品推荐

