📚
handbook
  • Introduction
  • 1.前言
    • 前言
    • 鸣谢
  • 2.环境篇
    • 工具部署和使用
      • 团队协作工具
        • Confluence
      • 开发工具
        • Docker
          • 镜像导入导出
          • 安装
        • Docker Compose
      • 持续集成工具
        • Gerrit
        • Sonarqube
          • 分析参数设定
          • Prerequisite
          • 服务端设置
        • Ubuntu Ci Deploy
          • ubuntu使用docker部署jenkins+sonarqube
        • 持续集成部署
      • 文本编辑工具
        • Gitbook相关注意事项
        • Markdown快速入门
      • 版本控制
        • Git
          • 1.基础
            • Git基础(一)
            • Git基础(二)
            • Git基础(三)
            • Git基础(四)
            • Git基础(五)
          • 2.命令详解
            • 命令速查
          • 3.进阶技巧
            • git技巧
      • 自动化测试工具
        • Appium
          • capability参数配置
          • 安装
          • 简介
      • 项目管理工具
        • Jira
    • 开发环境配置
      • 通用
        • Homebrew安装与使用
        • Git服务器添加SSH Key
        • koroFileHeader使用
        • nodejs与npm的安装
        • npm更换国内源
        • pip使用相关
        • PostgreSQL安装与使用
        • proxychain安装与使用
        • shell配置环境变量
        • snapd安装与使用
        • terminal走代理
    • 快捷键速查
      • shell常用快捷键
  • 3.语言篇
    • C
      • 代码规范
      • 语言技巧
    • Cpp
      • 代码规范
      • 基础知识
        • 理解C++中的左值和右值
      • 语言技巧
        • 并发编程
          • 简单的线程池实现
    • Golang
      • 代码规范
        • 避免使用转义字符串
        • 避免参数语义不明确
        • 嵌套式结构体
        • 函数的分组与顺序
        • 函数命名
        • 声明一致性
        • 导入别名
        • 使用字段名初始化结构体
        • 本地变量声明
        • map初始化
        • nil用法
        • 包命名
        • 命名Printf样式的函数
        • 减少嵌套
        • 缩小变量作用域
        • struct引用初始化
        • 测试表声明
        • 顶层变量声明
        • 不必要的else
      • 环境配置
        • 代码检查格式化工具
          • Go Fmt
          • Goimports
          • Golint
          • Go Vet
        • go mod详解
        • golang安装
        • Golang开发环境
        • Troubleshooting
      • 语言技巧
        • 如何分包
    • Java
      • 代码规范
      • 语言技巧
        • 注解编程
        • 动态代理
    • Js
      • 语言技巧
        • Rollup
    • Kotlin
      • 基础知识
        • 写给开发者Kotlin指引(一)
        • 写给开发者Kotlin指引(二)
    • Python
      • 语言技巧
        • Best Practice Of Python S Project Structure
  • 4.规范篇
    • Git message规范
  • 5.技术篇
    • Android技术
      • Hook
        • EdXposed例子
        • Android 10 上安装Magisk和EdXposed
      • Tinker
        • 1.Tinker及其使用
      • 准备
        • ADB连接设备步骤及注意事项
        • adb连接设备
        • aosp编译
      • 基础
        • Binder接口调用的鉴权方法
        • Make 及 Android 编译系统介绍
        • 使用Content Provider为其他应用提供数据
      • 源码阅读
        • Framework源码分析 Looper Handler
        • Framework源码分析 启动流程 ServiceManager的初始化
        • Framework源码分析 启动流程 Zygote启动SystemServer
    • JS Bridge
      • JSBridge初探
    • Kernel技术
      • kallsyms子系统
    • Test技术
      • 软件测试
        • jnekin+sonar 部署 问题总结
        • 性能测试基础
        • 软件测试的背景
        • 测试基础
        • 测试人员的核心竞争力
    • 操作系统原理
      • 处理器如何实现原子操作
Powered by GitBook
On this page
  • 背景
  • ES和CommonJS
  • rollup打包
  • rollup安装
  • rollup脚本编写
  • 模块打包

Was this helpful?

  1. 3.语言篇
  2. Js
  3. 语言技巧

Rollup

Previous语言技巧NextKotlin

Last updated 4 years ago

Was this helpful?

背景

业务提出一个需求,希望有工具能实现批量安装应用,可以通过实现一个客户端应用封装一下adb工具实现。不过业务分析一般使用windows,就必须要做成跨平台实现。另外之前通过页面提供了一些小功能给到业务分析,所以如果能通过在页面上实现的话是比较理想的。 调研后发现chrome提供了navigator usb功能,就是通过js能够访问到usb端口。而且通过navigator.usb实现了页面版的adb功能。不过这个项目是通过typescript来实现的,最后通过webpack和前端逻辑打包在了一起,没法直接用。所以将ts编译成的js文件都拷贝了出来,生成了. 但是当前还面临一个问题,这些js数量太多,让页面一个个加载不仅麻烦,还会出现无法调用的问题。那如何将这些js打包在一起? 最先考虑到的方案是webpack,但是webpack打包后,所有的逻辑被webpack封装了起来,原本js中定义的类和方法都没法直接使用。所以又了解到了rollup这个js打包工具。

ES和CommonJS

javascript有很多种规范,如commonjs,umd,amd,es等,我们这里主要对比下es和commonjs这两种当前比较常用的

区别项

es模块化

commonJS

可用于服务端还是浏览器

服务端和浏览器

服务端

模块依赖关系何时确定(即:何时加载模块)

编译时

运行时

设计思想

尽量的静态化

模块是不是对象

不是

是

是否整体加载模块(即加载的所有方法)

否

是

是否是动态更新(即通过接口,可以取到模块内部实时的值)

是。es module输出的是值的引用

不是。commonJS模块输出的是值的拷贝,不存在动态更新

模块变量是否是只读的

是。原因:ES6 输入的模块变量,只是一个“符号连接”,所以这个变量是只读的,对它进行重新赋值会报错。

rollup打包

从上面的需求我们知道我们需要在页面上用js实现adb协议,通过上面的es和commonjs的对比,我们知道commonjs主要用于服务端,其实也就是nodejs用的比较多。如果要在页面使用的话需要使用es规范。 那下面我们就需要打包我们的项目。

rollup安装

首先是要安装rollup,node环境和npm的安装这里就省略了

$npm install -g rollup

rollup脚本编写

创建一个rollup.config.js文件,写入打包的内容

export default [{
    input: 'src/adb.js',
    output: {
        // dir: 'dist',
        file: 'adb.bundle.js',
        format: 'es',
        name:"adb"
    }
}
];
  • input指整个模块的入口

  • output是输出参数

    • file是指输出文件名

    • format就是上面分析的js规范,这里指定输出es module

    • name是整个模块的名字

模块打包

在rollup.config.js文件的同级目录执行

$rollup -c

我们的脚本这么配置就可以了,如果有更复杂的需求,可以查看

github上有个项目
这个项目
官方的说明