使用 Rollup 搭建开发环境

安装 npm

npm init -y
npm install rollup rollup-plugin-babel @babel/core @babel/preset-env @rollup/plugin-node-resolve --save-dev
# 用 rollup 打包类库 用 babel 解析高版本 js 语法转低版本 js

指定配置文件监听文件变化

package.json

{
  "name": "vue2",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "dev": "rollup -cw", // rollup 打包,c: 指定配置文件 w: 监听文件变化
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "@babel/core": "^7.25.7",
    "@babel/preset-env": "^7.25.7",
    "rollup": "^2.79.2",
    "rollup-plugin-babel": "^4.4.0"
  }
}

rollup 配置文件: rollup.config.js

// rollup 默认可以导出一个对象,作为打包的配置文件
import babel from "rollup-plugin-babel";
import resolve from "@rollup/plugin-node-resolve";
export default {
  input: './src/index.js', // 入口
  output: {
    file: './dist/vue.js', // 出口
    name: 'Vue', // 在 global 添加一个 Vue 变量, 使外界可以使用 new Vue 实例化
    format: 'umd', // esm es6模块, commonjs 模块  iife 自执行函数 umd(统一模块规范, 可以兼容 amd, commonjs, 不兼容 es6)
    sourcemap: true, // 希望可以调试源代码
  },
  plugins: [
    babel({
      exclude: "node_modules/**", // 排除 node_modules 所有文件
    }),
    resolve(), // 导入文件不用写 index.js 后缀
  ]
}

babel 配置文件: .babelrc

{
  "presets": [
    "@babel/preset-env"
  ]
}

入口文件

// @/src/index.js

// 下边是测试代码
export const a = 100;

export default {
  name: 'QB',
  age: 18
}

执行脚本

npm run dev

下边是打包后的 ./dist/vue.js

(function (global, factory) {
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
  typeof define === 'function' && define.amd ? define(['exports'], factory) :
  (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Vue = {}));
})(this, (function (exports) { 'use strict';

  var a = 100;
  var index = {
    name: 'QB',
    age: 18
  };

  exports.a = a;
  exports["default"] = index;

  Object.defineProperty(exports, '__esModule', { value: true });

}));
//# sourceMappingURL=vue.js.map

测试

./dist/index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script src="vue.js"></script>
  <script>
    console.log(Vue);
  </script>
</body>
</html>