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

如何使用webpack和babel编译js文件为同时支持script引入和import导入的库

webpack 打包单JS类为兼容多场景库配置方案

前置准备

假设你的源文件为src/Demo.js,是单独的JS类,示例代码如下:

// src/Demo.js
class Demo {
  sayHi() {
    console.log('hello from demo library')
  }
}
export default Demo

步骤1:安装依赖

安装webpack基础依赖:

npm install webpack webpack-cli --save-dev

步骤2:编写webpack配置

在项目根目录新建webpack.config.js,核心配置output.library为UMD格式即可同时兼容全局引入、ES模块、CommonJS模块三种调用方式:

const path = require('path')

module.exports = {
  entry: './src/Demo.js', // 替换为你的单JS类文件实际路径
  output: {
    path: path.resolve(__dirname, 'demo'), // 输出目录,和你预期的存放路径对应
    filename: 'demo.js', // 输出文件名
    library: {
      name: 'Demo', // script标签引入时,挂载到window上的全局变量名
      type: 'umd', // 开启UMD格式兼容多模块规范
      export: 'default' // 源文件为export default导出时需配置此项,避免引入时需要加.default才能拿到类
    },
    globalObject: 'this' // 修复UMD模式下浏览器环境全局对象指向错误问题
  },
  mode: 'production' // 开发场景可改为development方便调试
}

步骤3:配置打包脚本

在package.json的scripts字段中添加打包命令:

{
  "scripts": {
    "build": "webpack"
  }
}

执行npm run build即可在demo/目录下生成最终产物demo.js。


两种使用方式验证

1. script标签直接引入

<script src='demo/demo.js'></script>
<script>
  // 直接使用全局变量Demo实例化
  const demoInstance = new Demo()
  demoInstance.sayHi()
</script>

2. ES模块导入

先在库项目的package.json中配置入口字段,方便其他项目识别引入:

{
  "name": "demo", // 包名,对应import时的包名
  "main": "demo/demo.js",
  "module": "demo/demo.js"
}

其他项目安装该包后即可直接导入使用:

import Demo from 'demo'
const demoInstance = new Demo()
demoInstance.sayHi()

可选优化

如果需要兼容更低版本浏览器,可添加babel-loader对源码做ES语法转译,按需配置即可。

内容的提问来源于stack exchange,提问作者Sunny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:09:03