从0开始搭建、上传npm包

从0开始搭建、上传npm包

  • 1、上传一个简单获取水果价格的包
    • [创建 `vite` 项目](#创建 vite 项目)
    • [在项目根目录 `src` 文件夹中创建 `index.ts` 文件,文件内容如下:](#在项目根目录 src 文件夹中创建 index.ts 文件,文件内容如下:)
    • [在 `main.ts` 文件中导入、导出上面创建的方法](#在 main.ts 文件中导入、导出上面创建的方法)
    • [创建 `vite.config.ts` 配置文件,文件内容如下](#创建 vite.config.ts 配置文件,文件内容如下)
    • [配置 `package.json` 文件,文件内容如下](#配置 package.json 文件,文件内容如下)
    • [添加 `README.md` 项目说明文件](#添加 README.md 项目说明文件)
    • 打包项目
    • [注册 `npm` 账号](#注册 npm 账号)
    • 项目中使用包
    • [修改 `npm` 包内容方法](#修改 npm 包内容方法)
  • 2、上传一个简单组件
    • [创建 `vite` 项目](#创建 vite 项目)
    • 创建自定义组件
    • [创建对应 `index.ts` 文件,文件内容如下:](#创建对应 index.ts 文件,文件内容如下:)
    • [配置 `vite.config.ts` 文件,文件内容如下:](#配置 vite.config.ts 文件,文件内容如下:)
    • 打包发布
    • 在页面中使用组件

1、上传一个简单获取水果价格的包

创建 vite 项目

js 复制代码
npm create vite

在项目根目录 src 文件夹中创建 index.ts 文件,文件内容如下:

js 复制代码
/**
 * 获取水果价格的方法
 * @param name 水果名称
 * @returns
 */
export const getPrice = (name: string) => {
  let price: number = 0.0;
  switch (name) {
    case "苹果":
      price = 9.99;
      break;
    case "香蕉":
      price = 7.89;
      break;
    case "梨":
      price = 6.65;
      break;
    case "榴莲":
      price = 9.65;
      break;
    case "菠萝":
      price = 5.42;
      break;

    default:
      throw new Error("未匹配到水果价格,请重新录入");
  }
  return price;
};

main.ts 文件中导入、导出上面创建的方法

js 复制代码
import { getPrice } from "./index";

export { getPrice };

创建 vite.config.ts 配置文件,文件内容如下

js 复制代码
import { defineConfig } from "vite";
export default defineConfig({
  build: {
    outDir: "dist", // 自定义构建输出目录
    target: "es2020",
    lib: {
      entry: "src/main.ts", // 入口文件路径
      formats: ["es", "cjs"],
    },
  },
});

配置 package.json 文件,文件内容如下

js 复制代码
{
  "name": "bagen-getPrice",
  "private": false,
  "version": "1.0.1",
  "type": "module",
  "main": "dist/bagen-getPrice.cjs",
  "module": "dist/bagen-getPrice.js",
  "scripts": {
    "serve": "vite",
    "build": "tsc && vite build",
    "preview": "vite preview"
  },
  "devDependencies": {
    "typescript": "^5.2.2",
    "vite": "^5.0.8"
  }
}

添加 README.md 项目说明文件

打包项目

js 复制代码
npm run build

注册 npm 账号

  • 官网
  • 配置 npm 源,在项目根目录中运行以下代码
js 复制代码
npm config set registry https://registry.npmjs.org
  • 登录 npm

输入:姓名 和 邮箱

js 复制代码
npm login
  • 发布
js 复制代码
npm publish

项目中使用包

  • 安装包
js 复制代码
npm install bagen-getPrice -S
  • 页面中使用
js 复制代码
import { getPrice } from 'bagen-getPrice'

getPrice('苹果')

修改 npm 包内容方法

  • 安装包
js 复制代码
npm install bagen-getPrice -S
  • 修改代码
  • 代码在 node_modules 文件夹中
  • package.json 文件中 更新版本号
  • 在自己包目录中运行如下代码:
js 复制代码
npm publish

2、上传一个简单组件

创建 vite 项目

js 复制代码
npm create vite

创建自定义组件

html 复制代码
<template>
  <input type="text" v-model="keyword" @keydown.enter="searchPriceHandle" />
  <br />
  {{ keyword }} {{ price }}
</template>

<script setup lang="ts">
import { ref } from "vue";
const keyword = ref<string>("");
const price = ref<string | number>("");

/**
 * 查询价格方法
 */
const searchPriceHandle = () => {
  switch (keyword.value) {
    case "苹果":
      price.value = 9.98;
      break;
    case "香蕉":
      price.value = 8.88;
      break;
    case "菠萝":
      price.value = 6.48;
      break;
    case "梨":
      price.value = 9.78;
      break;
    default:
      price.value = 0.0;
      throw new Error("未匹配到水果名称,请重新输入");
  }
};
</script>

<style lang="scss" scoped></style>

创建对应 index.ts 文件,文件内容如下:

  • components ->index.ts
js 复制代码
import { App } from "vue";
import custom from "./custom.vue";

const install = (app: App<Element>) => {
  app.component("Bg-Custom", custom);
};

export default {
  install,
};

配置 vite.config.ts 文件,文件内容如下:

js 复制代码
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";

export default defineConfig({
  plugins: [vue()],
  build: {
    outDir: "dist", // 自定义构建输出目录
    target: "es2020",
    lib: {
      entry: "src/components/index.ts", // 入口哦文件路径
      name: "bg-get-price", // 暴漏的全局变量(最好把名称都统一)
      fileName: "bg-get-price", // 输出的包文件名,默认取 package.json 的 name
    },
    rollupOptions: {
      // 确保外部化处理那些你不想打包进库的依赖
      external: ["vue"],
      output: {
        // 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量
        globals: {
          vue: "Vue",
        },
      },
    },
  },
});

打包发布

打包发布过程同上

在页面中使用组件

  • 安装包
js 复制代码
npm install bg-get-price -S
  • 注册,main.ts 文件中注册,代码如下:
js 复制代码
import bgGetPrice from "bg-get-price";
// 注册,重点
app.use(bgGetPrice)
  • 引用
html 复制代码
<bg-get-price></bg-get-price>

必须打包上传时候的名称一致

相关推荐
秦jh_13 分钟前
【Linux】多线程(概念,控制)
linux·运维·前端
蜗牛快跑21326 分钟前
面向对象编程 vs 函数式编程
前端·函数式编程·面向对象编程
Dread_lxy27 分钟前
vue 依赖注入(Provide、Inject )和混入(mixins)
前端·javascript·vue.js
涔溪1 小时前
Ecmascript(ES)标准
前端·elasticsearch·ecmascript
榴莲千丞1 小时前
第8章利用CSS制作导航菜单
前端·css
奔跑草-1 小时前
【前端】深入浅出 - TypeScript 的详细讲解
前端·javascript·react.js·typescript
羡与2 小时前
echarts-gl 3D柱状图配置
前端·javascript·echarts
guokanglun2 小时前
CSS样式实现3D效果
前端·css·3d
咔咔库奇2 小时前
ES6进阶知识一
前端·ecmascript·es6
渗透测试老鸟-九青2 小时前
通过投毒Bingbot索引挖掘必应中的存储型XSS
服务器·前端·javascript·安全·web安全·缓存·xss