乐趣区

rollup配置以及常见问题

近期维护组内的几个 lib 库,之前是 webpack 打包的,本身功能也不复杂,但因为性能是今年组内的重点,为了更小的体积,逐步将打包工具迁移到 rollup

经过一段时间的探索,逐步抽离了一份通用的配置,隐藏细节,使用者可以很方便的使用 rollup 进行打包

介绍

提供 alias,eslint,resolve,common,babel,replace,postcss 等基本插件,使用者可传入同名属性进行相应的 plugin 配置(见使用)

git 地址

dev 模式

提供了基本的启动服务以及热更新功能,服务启动在 http://127.0.0.1:8080,热更新默认监听 ./src 目录

生产环境

提供 uglify 和 filesize 功能

使用

安装

yarn add cerate-rollup-config --dev

使用

// rollup.config.js
const path = require('path')
const baseConfig = require('create-rollup-config');

const config = baseConfig({
    alias: {$common: './src/common'},
    replace: {env: JSON.stringify(process.env.NODE_ENV)
    },
    serve: {port: 7001},
    livereload: {watch: '/src' // default}
})

export default [
    {
        input: './src/test.js',
        output: [
            {
                file: 'dist/test.js',
                format: 'cjs'
            }
        ],
        ...config
    }
]

package.json 配置

{
    ...,
    "scripts": {
        "build": "cross-env NODE_ENV=production rollup -c ./rollup.config.js",
        "server": "cross-env NODE_ENV=development rollup -c ./rollup.config.js --watch",
        ...
    },
    ...
}

部分 plugin 介绍

postcss

默认开启了 minimize 功能

参考:rollup-config-postcss

html

将 html 文件转为字符串,并支持压缩

参考:rollup-plugin-string-html

遇到的问题

引入外部包时,提示方法不存在

原因是:

当引入 commonjs 包时,如果该包对 exports 进行了重新赋值,那么通过 rollup 打包时,获取不到该值,只能通过 namedExports 来告知 rollup

所以我们打包时,可以输出多个格式,cjs+umd

参考:https://github.com/rollup/rol…

同时使用 export default 和 export

写业务代码的时候,有时候会一起使用 export default 和 export,但在 rollup 中一起使用的时候,需要注意,打包出来的包是这样的

// test.js
export default {test: 'test'}
export const test2 = 'test2'

// 打包后
exports.default = {test: 'test'}
exports.test2 = 'test2'

这样要注意,通过 require(‘test’),导入的对象是

{
    default: {test: 'test'},
    test2: 'test2'
}

可能与你的预期不一致,除非加 default,require('test').default

babel 有个插件可以解决这个问题:https://github.com/59naga/bab…

退出移动版