Rollup配置
Rollup Typescript处理插件
Rollup 处理npm packages模块
Rollup 不会处理 node_modules 文件夹中的软件包。比如:
import answer from 'the-answer';
export default function () {
  console.log('the answer is ' + answer);
}
打包后,我们将会看到下面这些警告:
(!) Unresolved dependencies
https://github.com/rollup/rollup/wiki/Troubleshooting#treating-module-as-external-dependency
the-answer (imported by main.js)
这个 rollup-plugin-node-resolve 插件可以告诉 Rollup 如何查找外部模块。 安装它...
npm install --save-dev rollup-plugin-node-resolve
...将它加入到你的配置文件中:
// rollup.config.js
import resolve from 'rollup-plugin-node-resolve';
export default {
  input: 'src/main.js',
  output: {
    file: 'bundle.js',
    format: 'cjs'
  },
  plugins: [ resolve() ]
};
这次,当你运行 npm run build , 再没有警告输出 - 打包文件 bundle 包含了引用的模块
Rollup 使用external
npm依赖的分类
- dependencies - 运行项目业务逻辑需要依赖的第三方库
- npm install '模块名'的时候都会呗解析,下载
 
- devDependencies - 开发模式工作流下依赖的第三方库
- 单元测试,语法转换,lint工具,程序构建,本地开发 等等
 
- peerDependencies - 需要核心依赖库,不能脱离依赖库单独使用
 
Rollup使用external字段
可以将一些核心依赖放在dependencies和peerDependencies中,并在打包的时候将这些核心依赖以排除掉。这样子打包出来的组件库就只有自身的代码,比较精简,而其他核心依赖会在使用者安装组件库时,自动安装在node_modules.
//rollup.config.js 
import vue from 'rollup-plugin-vue'
import css from 'rollup-plugin-css-only'
import typescript from 'rollup-plugin-typescript2'
import { nodeResolve } from '@rollup/plugin-node-resolve'
import { name } from '../package.json'
const file = type => `dist/${name}.${type}.js`
const overrides = {
  compilerOptions: { declaration: true },
  exclude: ["tests/**/*.ts", "tests/**/*.tsx"]
}
export { name, file }
export default {
  input: 'src/index.ts',
  output: {
    name,
    file: file('esm'),
    format: 'es'
  },
  plugins: [
    nodeResolve(),
    typescript({ tsconfigOverride: overrides }),
    vue(),
    css({ output: 'bundle.css' })
  ],
  //告诉rollup不要将此打包,而作为外部依赖
  external: ['vue', 'lodash-es']
}
Rollup打包umd格式
- 使用globals声明外部依赖的全局变量名
- 使用export:'named'声明,本项目的umd的全局变量名
export default {
  ...basicConfig,
  output: {
    name:'legoComponents',
    file: file('umd'),
    format: 'umd',
    globals: {
      'vue': 'Vue',
      'lodash-es': '_'
    },
    export:'named'
  }
}