一、搭建rollup开发环境

  • 安装环境

    1. npm install rollup rollup-plugin-typescript2 @rollup/plugin-node-resolve @rollup/plugin-replace rollup-plugin-serve typescript -D
  • 生成ts配置文件

    1. npx tsc --init
包名 功能
rollup 打包工具
roll-plugin-typescript2 解析ts插件
@rollup/plugin-node-resolve 解析第三方模块
@rollup/plugin-replace 替换插件
rollup-plugin-serve 启动本地服务插件

二、开发

1、rollup.config.js

  1. import ts from 'rollup-plugin-typescript2'
  2. import { nodeResolve } from "@rollup/plugin-node-resolve"
  3. import replace from '@rollup/plugin-replace'
  4. import serve from 'rollup-plugin-serve'
  5. import path from 'path'
  6. export default{
  7. input:"src/index.ts",
  8. output:{
  9. name:'VueReactivity',
  10. format:'umd',
  11. file: path.resolve('dist/vue.js'), // 输出的文件路径
  12. sourcemap:true // 生成映射文件
  13. },
  14. plugins:[
  15. nodeResolve({
  16. extensions:['.js','.ts']
  17. }),
  18. ts({
  19. tsconfig:path.resolve(__dirname,'tsconfig.json')
  20. }),
  21. replace({
  22. 'process.env.NODE_ENV':JSON.stringify('development')
  23. }),
  24. serve({
  25. open:true,
  26. openPage:'/public/index.html',
  27. port:3000,
  28. contentBase:''
  29. })
  30. ]
  31. }

2、实现@vue/reactivity 的功能

安装

  1. npm install @vue/reactivitu

使用

  1. <script src="/node_modules/@vue/reactivity/dist/reactivity.global.js"></script>
  2. <!-- <script src="/dist/vue.js"></script> -->

src/public/index.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>Document</title>
  7. </head>
  8. <body>
  9. <div id="app">app</div>
  10. <script src="/node_modules/@vue/reactivity/dist/reactivity.global.js"></script>
  11. <!-- <script src="/dist/vue.js"></script> -->
  12. <script>
  13. // console.log(window, 'window');
  14. const { reactive, effect } = VueReactivity;
  15. const state = reactive({ name: 'liming', age: 20 });
  16. effect(() => {
  17. document.getElementById('app').innerHTML =
  18. state.name + '现在年龄' + state.age;
  19. });
  20. setTimeout(() => {
  21. state.name = '小明';
  22. }, 1000);
  23. </script>
  24. </body>
  25. </html>

image.png