rollup打包第三方依赖

12 篇文章 0 订阅
5 篇文章 0 订阅

相比于webpack的通用性来说,rollup更专用于esmodule的处理。这在某些场景下会需要一些额外的配置来处理特殊场景。

比如你使用rollup打包,产生报错:

Cannot use import statement outside a module 

这是因为rollup打包会处理相对路径,对于npm包的绝对路径引用是不会做任何处理的。这种情况可以用插件处理。

@rollup/plugin-node-resolve
配置如下:

import babel from 'rollup-plugin-babel';
import typescript from 'rollup-plugin-typescript2';
import resolve from '@rollup/plugin-node-resolve';
import pkg from './package.json';


export default {
  input: "src/index.ts",
  plugins: [],
  output: [
    {
      file: pkg.main,
      format: 'cjs'
    },
    {
      file: pkg.module,
      format: 'esm',
    },
    {
      file: pkg.browser,
      format: 'umd',
      name: 'Dry'
    }
  ],
  plugins: [
    typescript({
      check: false
    }),
    babel({
      presets: [['@babel/preset-env', {
        targets: {
          browsers: ['ie 11'],
        },
      }]],
    }),
    resolve(),
    replace({
      'process.env.NODE_ENV': JSON.stringify('production')
    })
  ]
}

但是如果你使用的这个三方库没有默认default,则需要配合@rollup/plugin-commonjs使用。配置如下:

注意commonjs这个模块应当在任何插件调用前调用!

import babel from 'rollup-plugin-babel';
import typescript from 'rollup-plugin-typescript2';
import commonjs from '@rollup/plugin-commonjs';
import resolve from '@rollup/plugin-node-resolve';
import pkg from './package.json';


export default {
  input: "src/index.ts",
  plugins: [],
  output: [
    {
      file: pkg.main,
      format: 'cjs'
    },
    {
      file: pkg.module,
      format: 'esm',
    },
    {
      file: pkg.browser,
      format: 'umd',
      name: 'Dry'
    }
  ],
  plugins: [
    commonjs({
      include: /node_modules/
    }),
    typescript({
      check: false
    }),
    babel({
      presets: [['@babel/preset-env', {
        targets: {
          browsers: ['ie 11'],
        },
      }]],
    }),
    resolve()
  ]
}

此时不出意外的话,第三方模块已经顺利打包进bundle包了。在运行的时候还是会出一个意外,就是报错:

Uncaught ReferenceError: process is not defined

这可能是源码中包含:

if (process.env.NODE_ENV !== "production") {}

rollup在打包时是不会处理process环境的,这种情况需要插件额外处理。@rollup/plugin-replace

import babel from 'rollup-plugin-babel';
import typescript from 'rollup-plugin-typescript2';
import commonjs from '@rollup/plugin-commonjs';
import resolve from '@rollup/plugin-node-resolve';
import replace from '@rollup/plugin-replace';
import pkg from './package.json';


export default {
  input: "src/index.ts",
  plugins: [],
  output: [
    {
      file: pkg.main,
      format: 'cjs'
    },
    {
      file: pkg.module,
      format: 'esm',
    },
    {
      file: pkg.browser,
      format: 'umd',
      name: 'Dry'
    }
  ],
  plugins: [
    commonjs({
      include: /node_modules/
    }),
    typescript({
      check: false
    }),
    babel({
      presets: [['@babel/preset-env', {
        targets: {
          browsers: ['ie 11'],
        },
      }]],
    }),
    resolve()]
}

至此配置就全部完成了

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Rollup 是一个 JavaScript 模块打包器,它主要用于打包 JavaScript 应用程序或库。它通常用于打包 Node.js 应用程序和库,但是也可以用于打包浏览器端应用程序。 Rollup 不支持直接打包 HTML 文件,但是可以使用插件来处理 HTML 文件。下面是一些常用的 Rollup 插件,可以帮助你打包 HTML 文件: 1. rollup-plugin-html:这个插件可以在打包过程中将 HTML 文件转换为 JavaScript 模块。它还支持将 CSS 文件内联到 HTML 文件中。你可以使用这个插件来打包单个 HTML 文件或多个 HTML 文件。 2. rollup-plugin-terser:这个插件可以在打包过程中压缩 JavaScript 代码和 HTML 内容。它可以帮助你减小文件大小并提高网站性能。 3. rollup-plugin-posthtml:这个插件可以在打包过程中使用 PostHTML 处理 HTML 文件。它支持使用各种插件来转换 HTML 内容,例如添加 CSS 前缀、压缩 HTML、优化图像等。 使用 Rollup 打包 HTML 文件的具体步骤如下: 1. 安装 Rollup 及相关插件: ``` npm install rollup rollup-plugin-html rollup-plugin-terser rollup-plugin-posthtml --save-dev ``` 2. 创建一个 Rollup 配置文件: ``` // rollup.config.js import html from 'rollup-plugin-html'; import { terser } from 'rollup-plugin-terser'; import posthtml from 'rollup-plugin-posthtml'; export default { input: 'src/index.js', output: { file: 'dist/bundle.js', format: 'iife' }, plugins: [ html({ include: '**/*.html' }), terser(), posthtml() ] } ``` 3. 在 HTML 文件中使用 JavaScript 模块: ``` <!DOCTYPE html> <html> <head> <title>My App</title> </head> <body> <script type="module" src="./dist/bundle.js"></script> </body> </html> ``` 4. 运行 Rollup 命令进行打包: ``` rollup -c ``` 以上就是使用 Rollup 打包 HTML 文件的基本步骤。需要注意的是,如果你的应用程序依赖于其他文件(例如 CSS、图像等),则需要在 Rollup 配置文件中添加相应的插件来处理这些文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值