使用rollup打包一个npm包

news/发布时间2024/5/16 21:05:34

使用rollup打包一个npm包

前言:在这个都在使用 npm install,来安装包的时代,你是否想发布一个自己的npm包,或者你工作中是否要发布一个npm包,来到你的项目中到处使用呢?(不晓得npm是什么的请移步:npm)

那么今天我们就来学习一下怎样打包一个自己的npm包

1.首先准备环境

node本地环境,vscode编辑器

2.创建两个项目

项目说明:

my-react-npm是我们准备要打包的npm的文件夹

my-react-test是我们本地测试要是用的文件夹

首先我们使用cmdmy-react-npm文件夹下执行npm init -y

执行成功之后我们会看到一个package.json文件,下面我们来再此文件夹下,依次创建src和lib目录

src存在内容;lib存放打包之后的内容

在src下添加下面的文件

文件内容Button.js

import React from "react";const Button = () => {return (<div>我是一个btn</div>)
}
export default Button;

index.js

import Button from './components/Button' 
export { Button }

现在我们需要安装我们需要的依赖了

当然你也可以一起安装 npm install @babel/core @babel/preset-env @babel/preset-react rollup @rollup/plugin-babel @rollup/plugin-commonjs @rollup/plugin-node-resolve -D

依赖请参阅npm上的具体内容说明,这里不具体说明。

然后我们在my-react-npm

下面创建rollup.config.js(注意这里有坑),后面会说

import { babel } from '@rollup/plugin-babel';
import commonjs from "@rollup/plugin-commonjs";
import resolve from '@rollup/plugin-node-resolve';
export default {input: './src/index.js',output: {file: './lib/bundle.js',format: 'es',},plugins: [resolve(),babel({exclude: 'node_modules/**', // 只编译我们的源代码presets: ['@babel/preset-env', '@babel/preset-react'],}),commonjs(),],// 设置react为外部引用,可避免打包时打进去,否则警告(!) Unresolved dependenciesexternal: ['react'],
};

上面是具体的配置内容

然后我们在package.json中添加如下配置:

"scripts": {"build": "rollup -c","dev": "rollup -c -w"
}

一切都OK了,现在我们执行npm run build

然后你就上当了:

怎么解决这个问题呢?

两种方式:

第一种在package.json文件中添加type: "module"

第二种:直接把rollup.config.js改为rollup.config.mjs

记得去掉package.json中第一种加的配置。

我们看一下我们打包好的东西:

上面我们已经完成了我们要打包的npm包的过程,现在我们要测试这个包。

测试包

测试包我们就需要我们创建的另外一个文件夹了(my-react-test),在另外一个文件夹下cmd执行npx create-react-app my-react-app

创建出来一个react项目,在这个项目中我们引入我们刚才打包好的东西。

首先我们在my-react-npm 目录下执行npm link (注意这里有坑)

我们会看到添加了一个包。

然后我们在我们刚才创建好的项目下执行cmd:npm link my-react-npm

这样我们就link到我们本地的包了,在项目中引用这个包就行了。

启动项目引用之后,我们会发现报错了

找不到。还记得我们前面提到过的坑吗?

当然我们忘记修改打包之后的main指向了

看我们之前配置的是什么,这个当然找不到Button了,我们应该把这个地方修改为lib下面的

lib/bundle.js
修改完,我们就能在页面中看到我们引入的内容了。
后面怎么发包,大家就自己从网上找吧。很简单的
 
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/06342654.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

矩阵求导(一)

前言 在大学的微积分课程中,我们学习过关于标量函数的导数。但是当我们求解一个多元函数的极值时,单独一个自变量的偏导数往往不能告诉我们太多信息,于是我们有一种天然的想法是要把每个自变量的偏导数放在一起,看看他们的联合效果如何。这个过程其实是一个向量求导的过程。…

吴恩达机器学习笔记(1-1到2-1)

吴恩达机器学习笔记(1-1到2-1) https://www.bilibili.com/video/BV164411b7dx?p=1 https://www.bilibili.com/video/BV164411b7dx?p=2 https://www.bilibili.com/video/BV164411b7dx?p=3 https://www.bilibili.com/video/BV164411b7dx?p=4 机器学习-吴恩达 一、初学 1、什…

NPU硬件架构及张量技术开发

NPU硬件架构及张量技术开发 NPU 系统介绍 V853 芯片内置一颗 NPU,其处理性能为最大 1 TOPS 并有 128KB 内部高速缓存用于高速数据交换,支持 OpenCL、OpenVX、android NN 与 ONNX 的 API 调用,同时也支持导入大量常用的深度学习模型。 NPU 系统架构 NPU 的系统架构如下图所示…

音乐盒组件Aplayer+Metingjs

Aplayer🍭 Wow, such a beautiful HTML5 music player(哇,好漂亮的HTML5音乐播放器) Aplayer是一个功能强大的HTML5音乐播放器 Aplayer官网文档:https://aplayer.js.org/#/MetingjsMetingjs基于Aplayer插件封装好的插件,开箱即用 Metingjs官网文档:https://github.com/me…

手动给docusaurus添加一个搜索

如果algolia不能自动配置的话,我教你手动给docusaurus添加一个搜索新版博客用docusaurus重构已经有些日子了,根据docusaurus的文档上也申请了Algolia,想一劳永逸的解决博客的搜索问题。但是流水有意,落花无情。 algolia总是不给我回复,我只能对着algolia的申请页面仰天长叹。…

这个网络爬虫代码,拿到数据之后如何存到csv文件中去?

大家好,我是皮皮。 一、前言 还是昨天的那个网络爬虫问题,大佬们,帮忙看看这个网络爬虫代码怎么修改?那个粉丝说自己不熟悉pandas,用pandas做的爬虫,虽然简洁,但是自己不习惯,想要在他自己的代码基础上进行修改,获取数据的代码已经写好了,就差存储到csv中去了。 他的…