前言
近期项目需要给APP编写类似于 jweixin-1.0.0.js
这样的桥接 APP 与 Webview 中 H5 页面的 js-sdk 类库,使用 gulp、gruntjs 或者 webpack 来搞有点重,因为 rollup 天生就对 Es 6 语法的支持非常友好,加上其首创的 tree shaking 技术使得打包出来的 js-sdk类库文件体型更小,还有官方也是非常推荐使用 rollup 进行 js 类库的开发,于是直接选用 Rollup 来自动化沟建非常适合。
一、项目文件 package.json
文件配置如下:
{ "name": "rollup-starter-app", "devDependencies": { "babel-core": "^6.26.0", "babel-plugin-external-helpers": "^6.22.0", "babel-plugin-transform-runtime": "^6.23.0", "babel-preset-env": "^1.6.1", "babel-preset-stage-2": "^6.24.1", "babel-register": "^6.26.0", "npm-run-all": "^4.1.3", "rollup": "^0.60.1", "rollup-plugin-babel": "^3.0.3", "rollup-plugin-commonjs": "^9.1.3", "rollup-plugin-node-resolve": "^3.3.0", "rollup-plugin-uglify": "^4.0.0", "serve": "^8.1.2" }, "dependencies": {}, "scripts": { "build": "rollup -c", "watch": "rollup -c -w", "dev": "npm-run-all --parallel start watch", "start": "serve public" } }
二、rollup 项目配置文件 rollup.config.js
文件配置如下:
import resolve from 'rollup-plugin-node-resolve'; import commonjs from 'rollup-plugin-commonjs'; import babel from 'rollup-plugin-babel'; import { uglify } from 'rollup-plugin-uglify'; // `npm run build` -> `production` is true // `npm run dev` -> `production` is false const production = !process.env.ROLLUP_WATCH; export default { input: 'src/myapp-jssdk.js', output: { file: 'public/myapp-jssdk.js', format: 'umd', // amd: 异步模块定义,用于像RequireJS这样的模块加载器;cjs: CommonJS,适用于 Node 和 Browserify/Webpack;umd:通用模块定义,以amd,cjs 和 iife 为一体;es:将软件包保存为ES模块文件;iife:一个自动执行的功能,适合作为<script>标签。(如果要为应用程序创建一个捆绑包,您可能想要使用它,因为它会使文件大小变小。) sourcemap: true }, plugins: [ resolve(), // tells Rollup how to find date-fns in node_modules commonjs(), // converts date-fns to ES modules babel({ exclude: 'node_modules/**', // 排除引入的库 runtimeHelpers: true // 配置runtime,不设置会报错 }), production && uglify() // minify, but only in production ] };
三、babel 项目配置文件 .babelrc
文件配置如下:
{ "presets": [ ["env", { "modules": false, "targets": { "browsers": ["> 1%", "last 10 versions", "not ie <= 8"] } }], "stage-2" ], "plugins": ["transform-runtime", "external-helpers"], "env": { "test": { "presets": ["env", "stage-2"], "plugins": ["istanbul"] } } }
注意:bebel 6 与 babel 7 相互之间不兼容,因此,用 babel 6 及其相关的插件时,也要引用 6 版本的。同理用 babel 7 及其相关的插件时,也要全部使用 7 版本的。