本文介绍: 相比于webpack的通用性来说,rollup更专用于esmodule处理。这在某些场景下会需要一些额外配置来处理特殊场景。但是如果你使用这个三方没有默认default,则需要配合@rollup/plugincommonjs使用。这是因为rollup打包会处理相对路径,对于npm包的绝对路径引用是不会做任何处理的。这种情况可以插件处理。此时不出意外的话,第三方模块已经顺利打包bundle包了。rollup打包时是不会处理process环境的,这种情况需要插件额外处理。至此配置就全部完成了。

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

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

Cannot use import statement outside a module 

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

@rollup/pluginnoderesolve
配置如下

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/plugincommonjs使用配置如下

注意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/pluginreplace

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()]
}

至此配置就全部完成

原文地址:https://blog.csdn.net/riddle1981/article/details/127112195

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_47436.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注