如何在npm上发布自己的包

news2024/10/6 14:34:20

如何在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(); // node
  else if (typeof define === 'function' && define.amd)
    define([], factory);    //  AMD/CMD
  else if (typeof exports === 'object')
    exports["Url"] = factory(); 
  else
    root["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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LLM主流开源代表模型

LLM主流开源大模型介绍 1 LLM主流大模型类别 随着ChatGPT迅速火爆,引发了大模型的时代变革,国内外各大公司也快速跟进生成式AI市场,近百款大模型发布及应用。 目前,市面上已经开源了各种类型的大语言模型,本章节我们…

用idea将java文件打成jar包

一、用idea将java文件打成jar包 1、在idea上选择file—Project Structure 2、Artifacts —点–JAR—From modules with dependencies 3、选择要打包的java文件 4、Build — Build Artifacts 5、找到刚才添加的Artifacts直接Build 6、生成jar包文件

tomcat服务器之maxHttpHeaderSize

背景:在OA流程表单中,填写了200条数据,一提交,秒报400错误,且请求没有打到后端中(无报错日志),一开始以为是谷歌浏览器的问题,可百度上关于这个错误的解决方案都是清除缓…

Renesas MCU之FreeRTOS的应用

目录 概述 1 FSP配置FreeRTOS 1.1 软件版本信息 1.2 配置FreeRTOS 2 FreeRTOS的Task 2.1 FSP下的项目结构 2.2 Task代码 2.2.1 Task测试案例配置 2.2.2 测试代码实现 3 自定义Task 3.1 编写代码 3.2 测试函数 4 测试 4.1 Task断点测试 4.2 板卡运行测试 概述 …

Spring boot 集成mybatis-plus

Spring boot 集成mybatis-plus 背景 Spring boot集成mybatis后,我们可以使用mybatis来操作数据。然后,我们还是需要写许多重复的代码和sql语句,比如增删改查。这时候,我们就可以使用 mybatis-plus了,它可以极大解放我…

CC++内存管理【new和delete操作符的详细分析】【常见面试题】

C/C内存管理 1.C/C内存分布 我们先来看一段代码&#xff0c;来了解一下C/C中的数据内存分布。 # include <stdlib.h>int globalVar 1; static int staticGlobalVar 1; // 比globalVar还要先销毁,同一个文件下后定义的先析构 // 全局变量存在 数据段&#xff08;静态…

opencv进阶 ——(十三)基于三角剖分实现换脸

换脸的关键在于人脸对齐&#xff0c;人脸对齐主要包括以下几点&#xff1a; 1、人脸可能存在一定的角度&#xff0c;因此需要先将倾斜方向进行对齐 2、大小对齐&#xff0c;将模板人脸的大小缩放到同一大小 3、要想有好的效果&#xff0c;关键点选取很重要 4、人脸对齐后&a…

前端自测 - 那些经典的bug

前言 我一直坚持的一个观点&#xff0c;就是不以bug数论成败&#xff0c;但是这个需要加一个前提&#xff0c;就是不能出现那些低级的bug&#xff0c;更不能反复的出现。 由此整理了一系列我认为比较经典常见的前端bug&#xff0c;都是在项目中多次遇到过的&#xff0c;用于前…

14. WinCC 无法打开画面编辑器Graphis Designer,且提示X值坐标过大,Y值坐标过大

wincc双击画面一直显示在这个界面&#xff0c;并且这个窗口背后还有小窗口。 直接回到桌面主界面下&#xff0c;点一下这个窗口&#xff0c;窗口消失&#xff0c;点击任务栏的wincc图标会弹窗&#xff0c;显示X坐标值过大&#xff0c;Y坐标值过大。将这些窗口都点击确定之后就…

多线程..

线程定义&#xff1a;线程是操作系统能够进行运算调度的最小单位&#xff0c;它被包含在进程之中&#xff0c;是进程中实际运作单位。简单来说&#xff0c;应用软件中相互独立&#xff0c;可以同时运作的功能。 多线程作用&#xff1a;有了多线程&#xff0c;我们就可以让程序…

扩散模型会成为深度学习的下一个前沿领域吗?

文章目录 一、说明二、 第 1 部分&#xff1a;了解扩散模型2.1 什么是扩散模型2.2 正向扩散2.3 反向扩散 三、他们的高成本四、扩散模型的用处五、为什么扩散模型如此出色六、第 2 部分&#xff1a;使用扩散模型生成6.1 用于自然语言处理和 LLM 的文本扩散6.2 音频视频生成6.3 …

Hadoop3:MapReduce源码解读之Map阶段的CombineFileInputFormat切片机制(4)

Job那块的断点代码截图省略&#xff0c;直接进入切片逻辑 参考&#xff1a;Hadoop3&#xff1a;MapReduce源码解读之Map阶段的Job任务提交流程&#xff08;1&#xff09; 6、CombineFileInputFormat原理解析 类的继承关系 与TextInputFormat切片机制的区别 框架默认的TextI…

docker构建jdk17镜像

资料参考 参考自黑马教程&#xff1a;10.Docker基础-自定义镜像_哔哩哔哩_bilibili 更多详细语法声明&#xff0c;请参考官网文档&#xff1a;https://docs.docker.com/engine/reference/builder 初步准备 1、下载jdk17包&#xff08;linux版&#xff09;&#xff0c;我这边版…

问题:在本案复议阶段,复议机关()。 #其他#媒体

问题&#xff1a;在本案复议阶段&#xff0c;复议机关&#xff08;&#xff09;。 A&#xff0e;有权责令被申请人纠正违法的征税行为 B&#xff0e;应当对被申请人作出的税务具体行政行为所依据的事实证据、法律程序、法律依据及设定权利义务内容的合法性、适当性进行全面审…

暑期来临,AI智能视频分析方案筑牢防溺水安全屏障

随着夏季暑期的来临&#xff0c;未成年人溺水事故频发。传统的防溺水方式往往依赖于人工巡逻和警示标识的设置&#xff0c;但这种方式存在人力不足、反应速度慢等局限性。近年来&#xff0c;随着视频监控智能分析技术的不断发展&#xff0c;其在夏季防溺水中的应用也日益凸显出…

【十二】图解mybatis日志模块之设计模式

图解mybatis日志模块之设计模式 概述 最近经常在思考研发工程师初、中、高级工程师以及系统架构师各个级别的工程师有什么区别&#xff0c;随着年龄增加我们的技术级别也在提升&#xff0c;但是很多人到了高级别反而更加忧虑&#xff0c;因为it行业35岁年龄是个坎这是行业里的共…

Day30 登录界面设计

​ 本章节,实现了登录界面窗口设计 一.准备登录界面图片素材(透明背景图片) 把准备好的图片放在 Images 文件夹下面,格式分别是 .png和 .icoico 图片,右键属性,生成操作选 内容 png 图片,右键属性,生成操作选 资源 选中 login.png图片鼠标右键,选择属性。生成的操作选…

(学习笔记)数据基建-数据安全

&#xff08;学习笔记&#xff09;数据基建-数据安全 数据安全数据安全实施难点数据安全保障流程数据安全措施实施阶段数据安全如何量化产出数据安全思考 数据安全 数据安全问题是最近比较热的话题&#xff0c;数据泄漏引发的用户信任危机事件也比比皆是&#xff0c;以及跨部门…

windows架设NTP时间服务器进行时间同步

一、windows架设NTP时间服务器 1.win11更改注册表 winR输入regedit 2.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config&#xff0c;找到Config目录&#xff0c;双击Config目录下的AnnounceFlags&#xff0c;设为5。 3.HKEY_LOCAL_MACHINE\SYSTEM\Current…

Unity + 雷达 粒子互动(待更新)

效果预览: 花海(带移动方向) VFX 实例 脚本示例 使用TouchScript,计算玩家是否移动,且计算移动方向 using System.Collections; using System.Collections.Generic; using TouchScript; using TouchScript.Pointers; using UnityEngine; using UnityEngine.VFX;public …