rollup打包js的注意点-haorooms博客分享

前言

rollup比较适合打包js的sdk或者封装的框架等,例如,vue源码就是rollup打包的。webpack比较适合打包一些应用,例如SPA或者同构项目等等。最近我们对rollup小试牛刀了一下。简单分享一些注意事项吧。

rollup基础

rollup基础知识及插件的一些使用,网上有不少资料,可以去查阅。

rollup中文网:www.rollupjs.com/guide/zh#-d…

问题记录吧

下面主要记录一下rollup使用过程中的一些报错及解决方案吧。

错误一:

You must supply options.name for IIFE bundles

出现这个报错,是要在options中指定name,例如如下:

  output: {
    file: resolve(`js/haorooms.${type}.js`),
    format: type,
    name: 'haorooms',
    banner
  },
复制代码

错误二

[!] (commonjs plugin) SyntaxError: Unexpected token

出现这个问题,可能有几个原因

1、rollup-plugin-commonjs未引入,或者加载循序不对

我们知道,webpack loader是有加载循序的(从右到左,从下到上),rollup虽然没有严格的加载循序,但是我通常是将commonjs放到babel编译之后。如下:

   babel({
      exclude: 'node_modules/**', // 排除node_modules 下的文件
      runtimeHelpers: true
    }),
    commonjs(),
复制代码

2、缺少babel类 我按照babel类熟悉编译插件作为这个项目的依赖。

 npm install --save-dev babel-plugin-transform-class-properties
复制代码

.babelrc配置如下:

{
  "presets": [
    ["env", {
      "modules": false,
      "targets": {
        "browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
      }
    }],
    "stage-2"
  ],
  "plugins": ["transform-runtime", "external-helpers","transform-class-properties"]
}
复制代码

注:上面的配置是babel 7.0以下的方式,假如babel7.0以上,用另外的方式配置,参见:babeljs.io/docs/en/v7-…

blog.zfanw.com/babel-js/

错误三

code: 'BAD_BUNDLE_TRANSFORMER', plugin: 'uglify'

这个问题比较坑爹,其实我用rollup打包demo代码是没有问题的,但是打包我的js就有问题了,好奇怪,后来我发现是swiper的问题,因为我依赖了swiper。关于swiper打包,在webpack中也有问题,通常babel打包之后,并不会把swiper的es6语法转换。有时候webapck也会报错,大致是

dom7 undefined ..
复制代码

webpack解决方案如下:

 resolve: {
    extensions: ['.js', '.vue', '.json'],
    alias: {
      'swiper': 'swiper/dist/js/swiper.js',
      '@': resolve('src')
    }
  },
复制代码

指定一个别名

但是发现rollup中好像没有这个方式,无奈,我在引入swiper的时候如下处理

import Swiper from 'swiper/dist/js/swiper.js'
复制代码

这样打包的时候就不会有问题了。

错误四

process not defined
复制代码

这个错误是在打包成功之后,浏览器运行发现的,发现打包之后的代码中有process.env.NODE_ENV

解决方案:

import replace from 'rollup-plugin-replace'

const env = process.env.NODE_ENV
plugins: [
 replace({
      'process.env.NODE_ENV': JSON.stringify(env)
    }),
]
复制代码

把 process.env.NODE_ENV这个替换掉

rollup 批量打包的方式

我们用rollup打包,一般都会打如下方式

amd – 异步模块定义,用于像RequireJS这样的模块加载器
cjs – CommonJS,适用于 Node 和 Browserify/Webpack
es – 将软件包保存为ES模块文件
iife – 一个自动执行的功能,适合作为
                    
                    

你可能感兴趣的:(rollup打包js的注意点-haorooms博客分享)