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

仓库地址https://github.com/kspf/two-ui

原文地址: https://kspf.xyz/archives/141/

rollup 开发环境搭建的更多相关文章

  1. python开发环境搭建

    虽然网上有很多python开发环境搭建的文章,不过重复造轮子还是要的,记录一下过程,方便自己以后配置,也方便正在学习中的同事配置他们的环境. 1.准备好安装包 1)上python官网下载python运 ...

  2. IntelliJ IDEA安装及jsp开发环境搭建

    一.前言 现在.net国内市场不怎么好,公司整个.net组技术转型,就个人来说还是更喜欢.net,毕竟不是什么公司都像微软一样财大气粗开发出VS这样的宇宙级IDE供开发者使用,双击sln即可打开项目, ...

  3. Qt for Android开发环境搭建及测试过程记录

    最近学习了Qt的QML编程技术,感觉相较于以前的QtGUI来说更方便一些,使用QML可以将界面与业务逻辑解耦,便于开发. QML支持跨平台,包括支持Android平台,因此可以使用Qt的QML进行An ...

  4. node.js之开发环境搭建

    一.安装linux系统 (已安装linux可跳此步骤) 虚拟机推荐选择:VirtualBox 或者 Vmware (专业版永久激活码:5A02H-AU243-TZJ49-GTC7K-3C61N) 我这 ...

  5. TODO:小程序开发环境搭建

    TODO:小程序开发环境搭建 1.第一步当然是要先注册小程序了 2.登录到小程序 a)完善小程序信息,如名称,图标,描述 3.绑定开发者 4.获取AppID,并设置服务器信息 5.下载并安装开发者工具 ...

  6. Eclipse中Python开发环境搭建

    Eclipse中Python开发环境搭建  目 录  1.背景介绍 2.Python安装 3.插件PyDev安装 4.测试Demo演示 一.背景介绍 Eclipse是一款基于Java的可扩展开发平台. ...

  7. 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)运行的是 ...

  8. Eclipse swt开发环境搭建

    原料: eclipse swt.下载链接为: Eclipse 4.6.2 Release Build: 4.6.2 配置说明: Developing SWT applications using Ec ...

  9. Ionic- Android 开发环境搭建

    Ionic- Android 开发环境搭建 为时一周的IONIC ADNROID 环境终于在各种处理错误中搭建成功,以下记录下搭建过程中遇到的各种情况的处理办法. 一 首先,当然是enviroment ...

随机推荐

  1. POJ 3984 迷宫(BFS)

    入门BFS,第一次做,部分借鉴了大牛的 #include <iostream> #include <cstdio> #include <queue> using n ...

  2. .NET Core 对象池的使用

    昨天在『.NET 大牛之路』技术群和大家聊到了对象池的话题,今天展开详细讲讲这个知识点. 池这个概念大家都很熟悉,比如我们经常听到数据库连接池和线程池.它是一种基于使用预先分配资源集合的性能优化思想. ...

  3. 资源:Git快速下载路径

    Git快速下载地址: 地址:https://npm.taobao.org/mirrors/git-for-windows/

  4. HMM实现中文分词

    链接:https://pan.baidu.com/s/1uBjLC61xm4tQ9raDa_M1wQ  提取码:f7l1 推荐:https://blog.csdn.net/longgb123/arti ...

  5. linux 中只显示目录的几种方法

    ls 参数 -a 表示显示所有文件,包含隐藏文件-d 表示显示目录自身的属性,而不是目录中的内容-F 选项会在显示目录条目时,在目录后加一个/ ls -l total 8 drwxrwxr-x 2 r ...

  6. ctf Decode

    这题其实没啥好说的,就是直接解,听学长说好像网上有现成的轮子可以用,我太年轻了,手动写了个decode函数. 也成功得到了flag.嘿嘿开心

  7. tcp三次握手四次挥手----转

    序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生:给字节编上序号后,就给每一个报文段指派一个序号:序列号seq就是这个报文 ...

  8. 章节1-Grafana Dashboard的简单应用(2)

    目录 使用Grafana创建可视化Dashboard 1. Add data sources - Prometheus 2. 导入 Dashboard 模板 2.1 Node Exporter for ...

  9. 前端-Vue基础2

    1.过滤器 前台通过后台传值,要对后台传过来的变量进行特殊处理,比如根据id转成中文等: 1.1 局部过滤器 局部过滤器只针对一个Vue实例 默认将|左侧count传递给右侧方法 {{count|fi ...

  10. 基于小熊派Hi3861鸿蒙开发的IoT物联网学习【三】

    软件定时器:是基于系统Tick时钟中断且由软件来模拟的定时器,当经过设定的Tick时钟计数值后会触发用户定义的回调函数.定时精度与系统Tick时钟的周期有关. 定时器运行机制: cmsis_os2的A ...