当前位置: 首页 > news >正文

如何在npm上发布自己的包

如何在npm上发布自己的包

npm创建自己的包

一、一个简单的创建

1、创建npm账号
  • 官网:https://www.npmjs.com/
  • 创建账号入口:https://www.npmjs.com/signup

注意:需要进入邮箱验证

2、创建目录及初始化
$ mkdir ufrontend-test
$ cd ufrontend-test
ufrontend-test> npm init
3、文件内容及目录结构

注意:在生成package.json中,name的名称和项目的名称保持一至

  • package.json
{"name": "ufrontend-test","version": "1.0.0","description": "","main": "index.js","scripts": {"ufrontend-test": "echo \"Error: no test specified\" && exit 1"},"author": "ufrontend","license": "ISC"
}
  • 入口文件编写,index.js,加一句简单的打印
console.info('hello world');
  • 最终目录结构
├── ufrontend-test
│   ├── index.js
└── └── package.json
4、发布
  • 项目根目录下,运行npm addUser命令,添加自己的用户信息
ufrontend-test> npm addUser

如果已经注册过账号,直接登录就行了

ufrontend-test> npm login

输入用户名、密码、邮箱

  • 发布
ufrontend-test> npm publish

发布完成后,在自己的package里,会看到对应的包

5、下载调用
  • 下载
ufrontend-test> npm install ufrontend-test -D

package.json

"devDependencies": {"ufrontend-test": "^1.0.0"
}
  • 使用

index.js

require('ufrontend-test');
  • 控制台执行
ufrontend-test> node index.js

输出:hello world

6、删除发布的包
ufrontend-test> npm --force unpublish ufrontend-test

注意:超过24小时就不能删除了

7、废弃包(这个包并不会删除,只是在别人下载使用的时候会提示)
ufrontend-test> npm deprecate --force ufrontend-test@1.0.0 "这个包不在维护了。"
8、更新包
  • 先把package.json里的version版本号修改了,再执行publish命令就行了
ufrontend-test> npm publish
  • 更新(重新下载)
ufrontend-test> npm install ufrontend-test -D

二、require/import导入及使用说明

1、目录结构
├── ufrontend-test2
│   ├── index.js
│   ├── package.json
└── └── readme.md
2、index.js(兼容AMD和CMD的写法)
;(function(global) {"use strict";var MyPlugin = function(opts) {console.log(opts);};MyPlugin.prototype = {init: function() {console.log('init');}};if (typeof module !== 'undefined' && module.exports) {module.exports = MyPlugin;} else if (typeof define === 'function') {define(function() { return MyPlugin; });}global.MyPlugin = MyPlugin;})(this);
3、readme.md(插件说明)

4、下载使用
  • 下载
ufrontend-test> npm install ufrontend-test2 -D
  • 在index.js中引入使用
var MyPlugin = require('ufrontend-test2');MyPlugin({name: 'MyPlugin',version: '1.0.1'
});MyPlugin.prototype.init();

运行命令

ufrontend-test> node index.js

结果:

{ name: 'MyPlugin', version: '1.0.1' }
init
  • 在vue项目main.js中,引入使用
ufrontend-test> npm install ufrontend-test4 -D
  • import方式
import MyPlugin from 'ufrontend-test4'
console.log(MyPlugin('hello my plugin.'))
  • require方式
let MyPlugin = require('ufrontend-test4');
console.log(MyPlugin('hello plugin.'))
5、加git仓库链接
  • 添加repository
"repository": {"type": "git","url": "https://github.com/xxx/ufrontend_test2.git"
},
  • 发布后,就可以在包中查看git仓库了

6、使用webpack打包

需要使用webpack对组件或者模块进行打包,因为可复用库的模块化,需要适合在任何场景中进行引用,比如AMD/CMD、CommonJs、ES6、ES5等环境。从webpack打包之后的头文件来看:

(function webpackUniversalModuleDefinition(root, factory) {if (typeof exports === 'object' && typeof module === 'object')module.exports = factory(); // nodeelse if (typeof define === 'function' && define.amd)define([], factory);    //  AMD/CMDelse if (typeof exports === 'object')exports["Url"] = factory(); elseroot["Url"] = factory();
})(this, function () {// somecode
}

从代码可以看出,webpack打包出来的文件是支持多场景的引用方式的。

下面我们只需要在webpack.config.js里添加libraryTarget配置,设为umd模式

output: {libraryTarget: "umd"
}

目录结构:

├── ufrontend-test4
│   ├── build
│   ├── ├── main.min.js
│   ├── index.js
│   ├── package.json
└── └── webpack.config.js
  • package.json
{"name": "ufrontend-test4","version": "1.0.4","description": "","main": "./build/main.min.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1"},"author": "ufrontend22","license": "ISC","devDependencies": {"webpack": "^3.1.0"}
}

main是最终引入的文件

  • 初始化安装
ufrontend-test> npm install
  • webpack.config.js指定umd模式
const webpack = require('webpack')
const path = require('path')module.exports = {entry: ['./index.js'],output: {path: path.resolve(__dirname, './build'),filename: '[name].min.js',libraryTarget: 'umd'}
}
  • index.js
module.exports = {foo() {console.log('foo');},bar() {console.log('bar')}
}

使用webpack打包

ufrontend-test> webpack
  • 重新发布
ufrontend-test> npm login
ufrontend-test> npm publish
  • 在vue项目中安装使用
ufrontend-test> npm install ufrontend-test4 -D

main.js

import {foo} from 'ufrontend-test4'
foo(); // foo

相关文章:

如何在npm上发布自己的包

如何在npm上发布自己的包 npm创建自己的包 一、一个简单的创建 1、创建npm账号 官网:https://www.npmjs.com/创建账号入口:https://www.npmjs.com/signup 注意:需要进入邮箱验证 2、创建目录及初始化 $ mkdir ufrontend-test $ cd ufron…...

SQL Chat:从SQL到SPEAKL的数据库操作新纪元

引言 SQL Chat是一款创新的、对话式的SQL客户端工具。 它采用自然语言处理技术,让你能够像与人交流一样,通过日常对话的形式对数据库执行查询、修改、创建及删除操作 极大地简化了数据库管理流程,提升了数据交互的直观性和效率。 在这个框…...

jmeter性能优化之mysql配置

一、连接数据库和grafana 准备:连接好数据库和启动grafana并导入mysql模板 大批量注册、登录、下单等,还有过节像618,双11和数据库交互非常庞大,都会存在数据库的某一张表里面,当用户在登录或者查询某一个界面时&…...

VueRouter3学习笔记

文章目录 1,入门案例2,一些细节高亮效果非当前路由会被销毁 3,嵌套路由4, 传递查询参数5,命名路由6,传递路径参数7,路径参数转props8,查询参数转props9,replace模式10&am…...

「前端+鸿蒙」鸿蒙应用开发-TS函数

在 TypeScript 中,函数是一等公民,这意味着函数可以作为参数传递、作为其他函数的返回值,甚至可以赋值给变量。TypeScript 为 JavaScript 的函数增加了类型系统,使得函数的参数和返回值都具有明确的类型。 TS快速入门-函数 基本函…...

python后端结合uniapp与uview组件tabs,实现自定义导航按钮与小标签颜色控制

实现效果(红框内): 后端api如下: task_api.route(/user/task/states_list, methods[POST, GET]) visitor_token_required def task_states(user):name_list [待接单, 设计中, 交付中, 已完成, 全部]data []color [#F04864, …...

mingw如何制作动态库附python调用

1.mingw和msvc g -fpic HelloWorld.cpp -shared -o test.dllg -L . -ltest .\test.cpp 注意-L后面的.挨不挨着都行,-l不需要-ltest.dll,只需要-ltest 2.dll.cpp extern "C" {__declspec(dllexport) int __stdcall add(int a, int b) {return…...

Vue学习|Vue快速入门、常用指令、生命周期、Ajax、Axios

什么是Vue? Vue 是一套前端框架,免除原生JavaScript中的DOM操作,简化书写 基于MVVM(Model-View-ViewModel)思想,实现数据的双向绑定,将编程的关注点放在数据上。官网:https://v2.cn.vuejs.org/ Vue快速入门 打开页面&#xff0…...

Python基础教程(八):迭代器与生成器编程

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…...

Oracle10.2.0.1冷备迁移之_数据文件拷贝方式

由于阿里云机房要下架旧服务器,单位未购买整机迁移服务,且业务较老不兼容Oracle11g,所以新购买一台新服务器进行安装Oracle10.2.0.1 ,后续再将数据迁移到新服务器上。 id 数据库版本 操作系统版本 实例名 源库 115.28.242.25…...

智能合约中外部调用漏洞

外部调用 : 在智能合约开发中,调用不受信任的外部合约是一个常见的安全风险点。这是因为,当你调用另一个合约的函数时,你实际上是在执行那个合约的代码,而这可能会引入你未曾预料的行为,包括恶意行为。下面…...

转型AI产品经理(4):“认知负荷”如何应用在Chatbot产品

认知负荷理论主要探讨在学习过程中,人脑处理信息的有限容量以及如何优化信息的呈现方式以促进学习。认知负荷定律认为,学习者的工作记忆容量是有限的,而不同类型的认知任务会对工作记忆产生不同程度的负荷,从而影响学习效果。以下…...

【C++11】常见的c++11新特性(一)

文章目录 1. C11 简介2. 常见的c11特性3.统一的列表初始化3.1initializer_list 4. decltype与auto4.1decltype与auto的区别 5.nullptr6.右值引用和移动语义6.1左值和右值6.1.1左值的特点6.1.2右值的特点6.1.3右值的进一步分类 6.2左值引用和右值引用以及区别6.2.1左值引用6.2.2…...

牛客周赛 Round 46 题解 C++

目录 A 乐奈吃冰 B 素世喝茶 C 爱音开灯 D 小灯做题 E 立希喂猫 F 祥子拆团 A 乐奈吃冰 #include <iostream> #include <cstring> #include <algorithm> #include <cmath> #include <queue> #include <set> #include <vector>…...

9.3 Go 接口的多态性

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…...

Java通过字符串字段匹配形成树形结构

Java通过字符串字段匹配形成树形结构 文章目录 Java通过字符串字段匹配形成树形结构数据表模拟数据解决办法:1、domian 类:2、Node层(形成树形关系):3、controller 层4、Util 工具类1、BeanCopierUtil4、Mapper5、Manager(用来组装树形结构)6、测试:有的时候我们形成树形不…...

数字孪生智慧水利:精准管理与智能决策的新时代

图扑数字孪生技术在智慧水利中的应用&#xff0c;通过虚拟模型与真实水利系统的无缝连接&#xff0c;实现对水资源和水利工程的全面监控和精细管理。实时数据采集与动态模拟提升了水利系统的预测和响应能力&#xff0c;从洪水预警到水质监测&#xff0c;数字孪生助力各项决策更…...

基于ChatGLM3的本地问答机器人部署流程

基于ChatGLM3的本地问答机器人部署流程 前言一、确定文件结构1.新建文件夹储存本地模型2.下载源码和模型 二、Anaconda环境搭建1.创建anaconda环境2.安装相关库3.设置本地模型路径4.启动 三、构建本地知识库1.下载并安装postgresql2.安装c库3.配置向量插件 四、线上运行五、 全…...

归并排序——逆序数对的统计

逆序数对的统计 题目描述 运行代码 #include <iostream> using namespace std; #define LL long long const int N 1e5 5; int a[N], tmp[N]; LL merge_sort(int q[], int l, int r) {if (l > r)return 0; int mid l r >> 1; LL res merge_sort(q, l,…...

基于截图和模拟点击的自动化压测工具开发(MFC)

1.背景 想对一个MFC程序做自动压测功能&#xff0c;根据判断程序界面某块区域是否达到预定状态&#xff0c;来自动执行鼠标点击或者键盘输入的操作&#xff0c;以解决测试人员需要重复手动压测问题。 1.涉及的技术 串口控制&#xff0c;基于MFC橡皮筋类(CRectTracker)做一个…...

洛谷 P1507:NASA的食物计划 ← 二维费用0/1背包问题

【题目来源】 https://www.luogu.com.cn/problem/P1507 【题目背景】 NASA&#xff08;美国航空航天局&#xff09;因为航天飞机的隔热瓦等其他安全技术问题一直大伤脑筋&#xff0c;因此在各方压力下终止了航天飞机的历史&#xff0c;但是此类事情会不会在以后发生&#xff0…...

农业IoT部署卡在MQTT连接失败?Python异步通信优化全链路解析(含田间实测吞吐量对比数据)

第一章&#xff1a;农业IoT部署卡在MQTT连接失败&#xff1f;Python异步通信优化全链路解析&#xff08;含田间实测吞吐量对比数据&#xff09;在华北平原某智慧农场的边缘网关部署中&#xff0c;23台土壤温湿度传感器频繁出现MQTT连接超时与会话重置现象&#xff0c;平均重连耗…...

打破BIM模型Web化壁垒:Revit2GLTF的轻量化转换技术革新

打破BIM模型Web化壁垒&#xff1a;Revit2GLTF的轻量化转换技术革新 【免费下载链接】Revit2GLTF view demo 项目地址: https://gitcode.com/gh_mirrors/re/Revit2GLTF 在数字化建筑设计流程中&#xff0c;BIM模型的高效协作与展示一直是行业痛点。设计团队常常面临这样的…...

新手避坑指南:用Python+ROS搞定AVP项目中的.bag数据读取与深度图转点云

从零开始处理AVP项目中的.bag数据&#xff1a;深度图与点云实战解析 停车场里75个RealSense相机同时工作&#xff0c;产生的.bag数据像一座未经开采的金矿——但当你第一次打开这些文件时&#xff0c;可能会感到无从下手。作为刚接触ROS和点云处理的新手&#xff0c;我清楚地记…...

8255A工作方式0实战:手把手教你用汇编语言驱动八路抢答器LED与数码管

8255A工作方式0实战&#xff1a;从零构建八路抢答器驱动框架 记得第一次在实验室见到8255A芯片时&#xff0c;那块黑色的DIP封装器件看起来平平无奇&#xff0c;直到它让八颗LED随着我的汇编指令跳起"灯光芭蕾"。本文将带你深入这个经典可编程并行接口芯片的实战应用…...

优化问题求解器选型指南:何时该用高斯伪谱法,而不是直接法或打靶法?

优化问题求解器选型指南&#xff1a;高斯伪谱法在动态系统控制中的战略定位 当面对化工反应器温度控制或航天器轨道转移这类复杂动态系统优化问题时&#xff0c;工程师们常陷入算法选择的困境。就像外科医生需要根据病灶位置选择手术刀或激光治疗一样&#xff0c;最优控制问题的…...

bully使用教程

bully是一款用于破解Wi-Fi Protected Setup&#xff08;WPS&#xff09;的工具&#xff0c;主要通过暴力破解WPS PIN码来获取无线网络的访问权限。WPS是一种简化Wi-Fi设备连接的协议&#xff0c;由于其设计缺陷&#xff0c;使得通过暴力破解PIN码来获取网络密钥成为可能。bully…...

开源大模型落地趋势一文详解:Youtu-2B轻量化实践

开源大模型落地趋势一文详解&#xff1a;Youtu-2B轻量化实践 最近和不少做AI应用的朋友聊天&#xff0c;大家普遍有个感受&#xff1a;大模型是好&#xff0c;但用起来太“重”了。动辄几十上百G的模型&#xff0c;对算力要求高&#xff0c;部署成本也大&#xff0c;很多中小团…...

手把手教你用MP2144搭建超低功耗单键开关机电路(含单片机代码)

超低功耗单键开关机电路设计与实现指南 在电池供电的嵌入式设备中&#xff0c;电源管理往往是决定产品续航能力的关键因素。想象一下&#xff0c;当你精心设计的智能手表因为待机功耗过高而需要频繁充电&#xff0c;或者户外传感器因为电源管理不当而提前耗尽电量——这些场景凸…...

NSudo:Windows权限管理的神兵利器与系统级操作革命

NSudo&#xff1a;Windows权限管理的神兵利器与系统级操作革命 【免费下载链接】NSudo [Deprecated, work in progress alternative: https://github.com/M2Team/NanaRun] Series of System Administration Tools 项目地址: https://gitcode.com/gh_mirrors/ns/NSudo 在…...