rollup 开发环境搭建
rollup 开发环境搭建

初始化项目使用lerna管理项目
使用npm init 初始化项目
npm init -y
安装lerna并初始化项目
npm install lerna --save-dev
# npx 使用node_modules 中的包
npx lerna init
现在已经生成了下面目录结构
two-ui
└───node_modules
└───packages
│		lerna.json
│		package.json
安装rollup并创建rollup.config.js文件
npm install rollup --save-dev
touch rollup.config.js
# vscode 打开rollup配置文件
code rollup.config.js
安装下面插件
| 包名 | 作用 | 
|---|---|
| rollup-plugin-commonjs | 将CommonJS模块转换为ES6 | 
| @rollup/plugin-node-resolve | 在node_模块中查找并绑定第三方依赖项 | 
| @rollup/plugin-json | 将json 文件转换为ES6 模块 | 
| @rollup/plugin-babel | rollup babel插件 | 
| @babel/core | babel核心模块 | 
| @babel/preset-env | babel | 
| @babel/preset-typescript | babel处理ts | 
| @vue/babel-plugin-jsx | 用tsx的方式写vue | 
| vue | vue | 
| rollup-plugin-terser | 优化代码 | 
| rimraf | 删除工具 | 
| @rollup/plugin-replace | 替换环境变量 | 
| rollup-plugin-serve | 开发服务器 | 
| rollup-plugin-livereload | 热更新服务 | 
| rollup-plugin-less | less | 
| @rollup/plugin-alias | 路径别名 | 
| eslint | 代码格式校验 | 
| inquirer | 命令行交互 | 
| cross-env | 设置环境变量 | 
| child_process | 创建子线程执行命令 | 
| plop | 根据模板创建目录结构 | 
| typescript | ts模块 | 
在rollup.config.js中写入以下rollup配置
import path from 'path'
// 将CommonJS模块转换为ES6
import commonjs from 'rollup-plugin-commonjs'
// 在node_模块中查找并绑定第三方依赖项
import resolve from '@rollup/plugin-node-resolve'
// 将json 文件转换为ES6 模块
import json from '@rollup/plugin-json'
// rollup babel插件
import { babel } from '@rollup/plugin-babel'
// 优化代码
import { terser } from 'rollup-plugin-terser'
// 删除工具
import rm from 'rimraf'
// 替换环境变量
import replace from '@rollup/plugin-replace'
// 开发服务器
import serve from 'rollup-plugin-serve'
// 热更新服务
import livereload from 'rollup-plugin-livereload'
// less 处理
import less from 'rollup-plugin-less'
// 路径别名
import alias from '@rollup/plugin-alias';
// 获取入口文件
const input = process.env.INPUT_FILE
// 开发环境or生产环境
const NODE_ENV = process.env.NODE_ENV
// 判断是是否为生产环境
const isPro = function () {
  return NODE_ENV === 'production'
}
// 当前执行命令的路径
const root = process.cwd()
// 获取每个包的package.json 文件
const pkg = require(path.resolve(root, 'package.json'))
// 后缀
const extensions = ['.js', '.jsx', '.ts', '.tsx', '.less']
// 排除的打包
const external = ['vue']
// 开发环境只打包esm
const output = [{
  exports: 'auto',
  file: path.join(root, pkg.module),
  format: 'es',
}]
// 如果是生产环境
if (isPro()) {
  // 也排出自己写的包
  external.push(/@two-ui/)
  // 打其他包
  output.push({
    exports: 'auto',
    file: path.resolve(root, pkg.main),
    format: 'cjs'
  })
}
// 删除dist目录
rm(path.resolve(root, 'dist'), err => {
  if (err) throw err
})
export default {
  input,
  output,
  external,
  // 监听的文件
  watch: {
    exclude: 'node_modules/**'
  },
  // 不参与打包
  plugins: [
    resolve({
      preferBuiltins: false,
      mainFields: ['module', 'main'],
      extensions
    }),
    less({
      // 开发模式下才插入到页面中
      insert:  isPro() ? false: true,
      output: 'dist/style/main.css',
    }),
    babel({
      babelHelpers: 'bundled',
      extensions,
      exclude: [
        '*.config.js',
        'packages/**/node_modules/*.d.ts',
        'node_modules/*.d.ts',
        '**/dist/**/*',
        '**/demo/*'
      ]
    }),
    commonjs(),
    json(),
    // 生产模式则压缩代码
    isPro() && terser(),
    // 热更新
    !isPro() && livereload({
      watch: ['dist', 'demo'],
      verbose: false
    }),
    // 开发模式替换环境变量
    !isPro() && replace({
      'process.env.NODE_ENV': JSON.stringify(NODE_ENV),
      "vue": "/vue.esm-browser.js"
    }),
    // 开发模式开启静态服务器
    !isPro() &&  serve({
      open: true,
      port: 8080,
      contentBase: [path.resolve(root, 'dist'), path.resolve(root, 'demo'), path.resolve(__dirname, 'node_modules/vue/dist')],
      openPage: 'demo/index.html'
    })
  ]
}
增加启动命令(这是在每个单独的包中的)
{
  "scripts": {
    "build:dev": "cross-env NODE_ENV=development INPUT_FILE=./src/index.ts rollup -c ../../rollup.config.js -w",
    "build:pro": "cross-env NODE_ENV=production INPUT_FILE=./src/index.ts rollup -c ../../rollup.config.js"
  }
}
创建babel.config.json文件并写入以下配置
{
    "presets": [
        "@babel/preset-env",
        "@babel/preset-typescript"
    ],
    "plugins": [
        "@vue/babel-plugin-jsx"
    ]
}
初始化eslint根据选项初始化eslint
npx eslint --init
增加格式化命令,校验格式是否正确与修复格式
{
  "lint": "eslint ./packages --ext ts --ext tsx",
  "fix": "eslint ./packages --ext ts --ext tsx --fix"
}
创建.eslintignore文件添加忽略需要校验的文件
node_modules
dist
rollup.config.js
packages/**/dist/
packages/**/*.d.ts
*.d.ts
/**/*.d.ts
es
lib
创建plop模板
mkdir plop-template/component
cd plop-template/component
创建一下目录结构
component
└───demo
│		│	 index.hbs
└───src
│		│	 component.hbs
│		│	 index.hbs
│		babel.config.json
│		LICENSE
│		package.hbs
│		README.hbs
创建plopfile.js配置文件
module.exports = plop => {
  plop.setGenerator('component', {
    description: 'create a custom component',
    prompts: [
      {
        type: 'input',
        name: 'name',
        message: 'component name',
        default: 'MyComponent'
      }
    ],
    actions: [
      {
        type: 'add',
        path: 'packages/{{name}}/src/index.ts',
        templateFile: 'plop-template/component/src/index.hbs'
      },
      {
        type: 'add',
        path: 'packages/{{name}}/demo/index.html',
        templateFile: 'plop-template/component/demo/index.hbs'
      },
      {
        type: 'add',
        path: 'packages/{{name}}/src/{{name}}.tsx',
        templateFile: 'plop-template/component/src/component.hbs'
      },
      {
        type: 'add',
        path: 'packages/{{name}}/babel.config.json',
        templateFile: 'plop-template/component/babel.config.json'
      },
      {
        type: 'add',
        path: 'packages/{{name}}/package.json',
        templateFile: 'plop-template/component/package.hbs'
      },
      {
        type: 'add',
        path: 'packages/{{name}}/LICENSE',
        templateFile: 'plop-template/component/LICENSE'
      },
      {
        type: 'add',
        path: 'packages/{{name}}/README.md',
        templateFile: 'plop-template/component/README.hbs'
      }
    ]
  })
}
rollup 开发环境搭建的更多相关文章
- python开发环境搭建
		虽然网上有很多python开发环境搭建的文章,不过重复造轮子还是要的,记录一下过程,方便自己以后配置,也方便正在学习中的同事配置他们的环境. 1.准备好安装包 1)上python官网下载python运 ... 
- IntelliJ IDEA安装及jsp开发环境搭建
		一.前言 现在.net国内市场不怎么好,公司整个.net组技术转型,就个人来说还是更喜欢.net,毕竟不是什么公司都像微软一样财大气粗开发出VS这样的宇宙级IDE供开发者使用,双击sln即可打开项目, ... 
- Qt for Android开发环境搭建及测试过程记录
		最近学习了Qt的QML编程技术,感觉相较于以前的QtGUI来说更方便一些,使用QML可以将界面与业务逻辑解耦,便于开发. QML支持跨平台,包括支持Android平台,因此可以使用Qt的QML进行An ... 
- node.js之开发环境搭建
		一.安装linux系统 (已安装linux可跳此步骤) 虚拟机推荐选择:VirtualBox 或者 Vmware (专业版永久激活码:5A02H-AU243-TZJ49-GTC7K-3C61N) 我这 ... 
- TODO:小程序开发环境搭建
		TODO:小程序开发环境搭建 1.第一步当然是要先注册小程序了 2.登录到小程序 a)完善小程序信息,如名称,图标,描述 3.绑定开发者 4.获取AppID,并设置服务器信息 5.下载并安装开发者工具 ... 
- Eclipse中Python开发环境搭建
		Eclipse中Python开发环境搭建 目 录 1.背景介绍 2.Python安装 3.插件PyDev安装 4.测试Demo演示 一.背景介绍 Eclipse是一款基于Java的可扩展开发平台. ... 
- Windows 10 IoT Serials 1 - 针对Minnow Board MAX的Windows 10 IoT开发环境搭建
		目前,微软针对Windows IoT计划支持的硬件包括树莓派2,Minnow Board MAX 和Galileo (Gen 1和Gen 2).其中,Galileo (Gen 1和Gen 2)运行的是 ... 
- Eclipse swt开发环境搭建
		原料: eclipse swt.下载链接为: Eclipse 4.6.2 Release Build: 4.6.2 配置说明: Developing SWT applications using Ec ... 
- Ionic- Android 开发环境搭建
		Ionic- Android 开发环境搭建 为时一周的IONIC ADNROID 环境终于在各种处理错误中搭建成功,以下记录下搭建过程中遇到的各种情况的处理办法. 一 首先,当然是enviroment ... 
随机推荐
- Pandas高级教程之:统计方法
			目录 简介 变动百分百 Covariance协方差 Correlation相关系数 rank等级 简介 数据分析中经常会用到很多统计类的方法,本文将会介绍Pandas中使用到的统计方法. 变动百分百 ... 
- django项目部署到centos,踩的坑
			FAQ1:在使用pip3安装库的时候,提示需要升级pip pip3 install --upgrade pip FAQ2:在创建软链接时,提示:ln: failed to create symboli ... 
- Python上下文管理器你学会了吗?
			什么是上下文管理器 对于像文件操作.连接数据库等资源管理的操作,我们必须在使用完之后进行释放,不然就容易造成资源泄露.为了解决这个问题,Python的解决方式便是上下文管理器.上下文管理器能够帮助你 ... 
- phpstorm之"Can not run PHP Code Sniffer"
			前言 其实我是不太愿意写这种工具使用博客的,因为实在没有营养,只是有些简单问题,搜索一番,却始终找不到答案,遂以博客记录下来,希望后面的人,可以省去搜索之苦. 相信你搜到这篇博客,肯定是已经安装好了P ... 
- 在Redis中设置了过期时间的Key,需要注意哪些问题?
			熟悉Redis的同学应该知道,Redis的每个Key都可以设置一个过期时间,当达到过期时间的时候,这个key就会被自动删除. 在为key设置过期时间需要注意的事项 1. DEL/SET/GETSET等 ... 
- ctf常见编码形式(罗师傅)
			https://zhuanlan.zhihu.com/p/30323085 这是原链接 ASCII编码 •ASCII编码大致可以分作三部分组成: •第一部分是:ASCII非打印控制字符(参详ASCII ... 
- 网络流24题:最长 k 可重区间集问题题解
			最长 k 可重区间集问题题解: 突然想起这个锅还没补,于是来把这里补一下qwq. 1.题意简述: 有\(n\)个开区间,这\(n\)个开区间组成了一个直线\(L\),要求选择一些区间,使得在直线\(L ... 
- Selenium自动化测试框架Ride使用XLRD对于Excel测试数据的管理和操作
			Python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库. 一.安装xlrd模块 到python官网下载http://pypi.pytho ... 
- C语言:常用数学函数
			#include <stdio.h> #include <math.h> #include <stdlib.h> #include <time.h> # ... 
- MySQL服务不见 - 解决方法
			因为开发需要,今天安装了PHPStudy服务.导致以前的MySQL服务在服务表里面不见了.通过查阅网址的资料解决了,那么赶快记录下来 1. 确认当前的系统是管理员身份 2. 切换到MySQL数据库的安 ... 
