Packaging the View Component Library with rollup

Shinko! 2021-10-13 17:27:26
packaging view component library rollup


Il a été mentionné dans un article précédent queEncapsulationVueMéthode de la Bibliothèque de composants,Y compris:webpackageEtvue-cliMéthode.

Mais les deux méthodes ont des inconvénients:

  • Impossible d'emballerESModule
  • Impossible de générerTypescriptFichier de déclaration de type
  • Le paquet de construction est volumineux

J'ai donc décidé de réexaminer l'utilisation derollupDéveloppement et emballagevueBibliothèque de composants(Vue@3,Typescript,SCSS)Méthode.

RollupComparé àwebpackMieux pour emballer la Bibliothèque,Sa configuration est également relativement simple.Nous allons d'abord présenter le profil directement:

import Path from 'path'
import { getBabelOutputPlugin } from '@rollup/plugin-babel'
import RollupPluginNodeResolve from '@rollup/plugin-node-resolve'
import RollupPluginCommonjs from '@rollup/plugin-commonjs'
import RollupPluginTypescript2 from 'rollup-plugin-typescript2'
import RollupPluginVue from 'rollup-plugin-vue'
import RollupPluginPostcss from 'rollup-plugin-postcss'
import RollupPluginDelete from 'rollup-plugin-delete'
import Autoprefixer from 'autoprefixer'
import PackageJson from './package.json'
export default [
{
input: 'src/index.ts',
external: Object.keys(PackageJson.dependencies || {}),
plugins: [
RollupPluginDelete({
targets: Path.resolve(__dirname, 'dist/*'),
watch: true
}),
RollupPluginVue({
css: false
}),
RollupPluginPostcss({ extract: true, plugins: [Autoprefixer] }),
RollupPluginTypescript2(),
RollupPluginNodeResolve(),
RollupPluginCommonjs(),
getBabelOutputPlugin({ configFile: Path.resolve(__dirname, 'babel.config.js') })
],
output: {
file: PackageJson.module,
format: 'esm',
sourcemap: true
}
}
]
Copier le Code

Traitement des fichiers

Différents formats de fichiers sont nécessaires rollupTraitement des plug - ins:

  • RollupPluginPostcss:TraitementscssEtcssDocumentation
  • RollupPluginTypescript2:TraitementtsDocuments etvueDans le fichier<script lang="ts">

ExtractionCSS

Une bibliothèque de composants met généralement CSS Code extrait dans un fichier ,Configurationrollup-plugin-vueEtrollup-plugin-postcssC'est fait.:

RollupPluginVue({ css: false })
RollupPluginPostcss({ extract: true, plugins: [Autoprefixer] })
Copier le Code

babel

Parce quetsLes fichiers serontrollup-plugin-typescript2Traitement, Nous devons remettre le Code traité par babelTraitement,Utilisez ici@rollup/plugin-babelFournigetBabelOutputPluginMéthodes, Au lieu d'utiliser ce plugin directement :

RollupPluginCommonjs()
getBabelOutputPlugin({ configFile: Path.resolve(__dirname, 'babel.config.js') })
Copier le Code

Il est important de noter que,getBabelOutputPluginDépendance@rollup/plugin-commonjs Le plug - in doit être placé derrière .

babel Configurer comme d'habitude ,Par exemple,:

module.exports = {
presets: [
[
'@babel/preset-env',
{
modules: false,
useBuiltIns: 'usage',
corejs: 3,
targets: {
browsers: ['> 1%', 'last 2 versions', 'not dead']
}
}
]
],
plugins: [
[
'@babel/plugin-transform-runtime',
{
corejs: 3
}
]
]
}
Copier le Code

TypescriptDéclaration de type(.d.ts)Documentation

RollupOfficial@rollup/plugin-typescript Il y a un problème avec le plug - in ,Même sitsconfig.jsonSet in"declaration": true Et le fichier de déclaration ne sera pas généré , C'est pourquoi nous utilisons des rollup-plugin-typescript2Plug - in.

Dépendance

Les bibliothèques de composants ne contiennent généralement pas de dépendances communes (Par exemple,vue),Paramètresexternal Exclure .

{
external: Object.keys(PackageJson.dependencies || {})
}
Copier le Code
版权声明
本文为[Shinko!]所创,转载请带上原文链接,感谢
https://qdmana.com/2021/10/20211013172722320Z.html

  1. Error in spring source code compilation: the monoprocessor in reactor.core.publisher is outdated
  2. Buctf [geek Challenge 2019] http
  3. 20 个值得学习的 Vue 开源项目
  4. 20 projets open source à apprendre
  5. Scène et application de la manette des gaz anti - bavardage
  6. Qu'est - ce que j'ai gagné en abandonnant vue pour les six mois de React?
  7. À partir de [Bytecode cache] et de [http cache], intervieweur: « est - ce si mince? »
  8. [niveau intermédiaire et avancé] obligatoire, 30 + questions manuscrites à haute fréquence et réponses détaillées (dix mille caractères longs), voyez comment "vous" ne pouvez pas m'abattre
  9. Mise en œuvre d'un outil d'échafaudage universel pour l'ingénierie Web de 0 à 1
  10. 【中高级前端】必备,30+高频手写题及详细答案(万字长文),看“你”怎么难倒我
  11. In less than two days, the box office exceeded 400 million, and Changjin Lake broke out, breaking seven records in Chinese film history
  12. Tong Liya Jin Chen bumps her hair, Xie Na Zhao Liying bumps her shirt, and she sees EQ from the reaction
  13. react之组件生命周期
  14. L'équipe de vue dévoile un nouvel outil d'échafaudage rapide comme la foudre Create View, qui remplacera la vue CLI à l'avenir, avec seulement 300 lignes de code, apprenez - le!
  15. 20 dessins illustrant le fonctionnement du moteur de rendu du Navigateur
  16. In less than two days, the box office exceeded 400 million, and Changjin Lake broke out, breaking seven records in Chinese film history
  17. 千锋重庆web前端学习之理解CSS位置属性
  18. 什么是语义HTML标记以及如何使用它们?
  19. Si vous vous représentez avec un tableau, c'est le champ de Van Gogh.
  20. 前端面试手写代码
  21. 前端开发框架Vue中Vuex的使用原理分享
  22. vue-echarts初次体验
  23. 分享一些web前端开发好用的网站
  24. 每天读一点webpack-003
  25. react之组件生命周期
  26. Alibaba collection version of mybatis handwritten documents, Java front-end interview questions
  27. SpringBoot Java后端实现okhttp3超时设置
  28. react之組件生命周期
  29. Cycle de vie des composants de React
  30. 使用Reactor将阻塞调用变为异步非阻塞
  31. Baked cake wife sun photos, plain face on camera, beautiful appearance is still a beauty, watching children during the festival is a little helpless
  32. 亚洲知名插画师荒川(arakawa) 仅8件独版NFT作品系列《Can't Out》正式上架Element综合市场
  33. Taiyuan: singing, welcoming the national day, gathering to praise blessings
  34. Arakawa, un illustrateur Asiatique bien connu, n'a mis sur le marché que huit pièces de la collection NFT "can't out" en une seule édition.
  35. Résumé des questions d'entrevue Hadoop (II) - - hdfs
  36. 如何解决“Serverless”系统的冷启动问题
  37. BootstrapBlazor 模板安装
  38. BootstrapBlazor 模板安装
  39. Tong Liya Jin Chen bumps her hair, Xie Na Zhao Liying bumps her shirt, and she sees EQ from the reaction
  40. 使用ESLint+Prettier来统一前端代码风格
  41. 为什么说 Node.js 是实时应用程序开发的绝佳选择
  42. PaddlePaddle:在 Serverless 架构上十几行代码实现 OCR 能力
  43. 使用elementui在完成项目中遇到的未知知识点2
  44. On the mechanism of webpack loader
  45. 云原生体系下 Serverless 弹性探索与实践
  46. vue开发技巧
  47. Une fleur merveilleuse de l'histoire de l'industrie des nouveaux véhicules énergétiques, Zhongtai Jiangnan T11, une voiture vintage que vous n'avez jamais vue
  48. 致敬!再见了!LayUI !
  49. Vue安装和卸载
  50. Implement a flipped character with the transform attribute of CSS
  51. 你的第一个 Docker + React + Express 全栈应用
  52. [apprentissage de l'algorithme] 1486. Fonctionnement exclusif du tableau (Java / C / C + + / python / go / Rust)
  53. Zhang Daxian sends a blessing video on xYG relay, showing positive energy in details
  54. 前端技巧-JS元编程ES6 symbol公开符号
  55. Article de 37 ans seul à l'hôpital!Il boitait, soupçonnait d'être blessé, souriait avec douleur
  56. 前端推荐!10分钟带你了解Konva运行原理
  57. npm ERR! iview-project@3.0.0 init: `webpack --progress --config webpack.dev.config.js
  58. 零基础学习Web前端需要注意什么呢?
  59. The Youth League promotes Yiyang Qianxi new film, and the relationship between the two generation and the generation is good. Li Fei is blessed.
  60. Qu'est - ce qu'il faut remarquer à l'avant - plan Web de l'apprentissage de base zéro?