window上搭建npm私仓(verdaccio)

搭建个人npm私有仓库全攻略

搭建npm私库

1、安装verdaccio

首先电脑上要安装有nodejs【具体安装流程请自行网上搜索】

npm install -g verdaccio --unsafe-perm

如下图所示:安装完成后如果没有提示错误则表示安装
在这里插入图片描述

2、启动verdaccio

在这里插入图片描述

3、修改配置文件 config.yaml

在这里插入图片描述
3.1 在配置文件的末尾添加listen: 0.0.0.0:4873【配置此选项则是允许任何外部的所有IP都可以访问到此服务
在这里插入图片描述
3.2 配置npm仓库位置,找一个位置新建一个目录,然后将仓库位置填写进配置文件
在这里插入图片描述
在这里插入图片描述

4、重启verdaccio,然后在另外一台电脑打开访问

4.1 重启 verdaccio
在这里插入图片描述
4.2 在另外一台电脑打开访问,如下图所示:表示 npm 私有仓库搭建成功
在这里插入图片描述

5、给npm私库添加账户

首先需要npm源切换到npm私库【推荐:安装nrm来管理npm的源】
5.1 安装nrm, 如下图所示:
在这里插入图片描述
5.2 用nrm ls来查看目前npm有哪些源可以使用,带*号的表示目前正在使用的源,如下图所示:
在这里插入图片描述
5.3 新增 npm 私库所在npm源
在这里插入图片描述
5.4 通过nrm use localnpm将源切换到 npm 私库
在这里插入图片描述
5.5 通过npm adduser来新建一个用户,此时会出现错误,如下图所示:
在这里插入图片描述
出现错误的原因是我们使用的源服务没有启动,这也就表名我们添加的npm源起作用了,在使用npm连接的是我们刚才新添加的那个源,然后启动服务,如下图所示:
在这里插入图片描述
5.6 执行npm adduser给npm私库添加用户名、密码、邮箱,如下图所示:
在这里插入图片描述

外部电脑访问【能够 ping npm私库所在计算机】

1、上传 npm 包

1.1 新建一个项目,使用 npm init 初始化,如下图所示:
在这里插入图片描述
1.2 进入到该项目中,随便新建一个js文件,如下图所示:
在这里插入图片描述
1.3 使用npm login进行登录,输入用户名,密码,邮箱验证,如下图所示:
在这里插入图片描述
1.4 执行npm publish,如下图所示:
在这里插入图片描述
1.5 刷新网页,即可查看到上传的包,如下图所示:
在这里插入图片描述

2、下载 npm 包

可以随意找一个 vue 项目,执行 npm install windemo, 即可下载npm 私库上的包

参考文章:
Verdaccio - v5.8.0 中文文档
window上搭建npm私仓(verdaccio)【在此感谢大大的详细说明!】

<think>我们正在处理一个关于Vue组件封装和发布到npm的问题。用户希望了解如何创建可复用的公共组件并将其发布到npm库。我们将结合引用的内容,分步骤解答。 步骤1:创建可复用的Vue组件 首先,我们需要创建一个Vue组件。这个组件应该具有独立的逻辑和样式,以便于复用。以下是一个简单的示例: 1. 在项目中创建一个新的组件文件,例如`MyComponent.vue`。 ```vue <template> <div> <h1>这是一个可复用的组件</h1> <p>{{ message }}</p> </div> </template> <script> export default { name: 'MyComponent', props: { message: { type: String, default: '默认消息' } } } </script> <style scoped> /* 这里写组件的样式 */ </style> ``` 步骤2:准备组件库的入口文件 为了将多个组件打包成一个库,我们需要创建一个入口文件(例如`index.js`),在这个文件中安装所有组件并导出。 1. 在组件库的根目录下创建`index.js`文件: ```javascript import MyComponent from './MyComponent.vue' const components = { MyComponent } // 定义 install 方法,用于全局注册组件 const install = function (Vue) { if (install.installed) return Object.keys(components).forEach(key => { Vue.component(key, components[key]) }) } // 自动安装,当在浏览器中通过script标签引入时 if (typeof window !== 'undefined' && window.Vue) { install(window.Vue) } // 导出组件和install方法 export default { install, ...components } ``` 步骤3:配置package.json 为了发布到npm,我们需要配置package.json文件。确保设置了正确的名称、版本、入口文件等。 ```json { "name": "my-vue-component-library", // 包名,确保在npm上是唯一的 "version": "1.0.0", "main": "dist/my-vue-component-library.umd.js", // 打包后的入口文件 "module": "dist/my-vue-component-library.esm.js", "files": [ "dist/*", "src/*" ], "scripts": { "build": "vue-cli-service build --target lib --name my-vue-component-library ./src/index.js" }, "dependencies": { // 依赖 }, "devDependencies": { // 开发依赖 } } ``` 步骤4:构建组件库 使用Vue CLI的构建命令将组件库打包成UMD和CommonJS等格式。 运行构建命令: ```bash npm run build ``` 步骤5:发布到npm 在发布之前,确保已经注册了npm账号,并且已经登录(使用`npm login`登录)。 1. 在项目根目录下执行: ```bash npm publish ``` 注意:如果包名已经被使用,需要更改包名。 步骤6:在其他项目中使用 发布成功后,其他项目可以通过npm安装该组件库。 ```bash npm install my-vue-component-library ``` 然后在项目的入口文件(如main.js)中全局注册: ```javascript import Vue from 'vue' import MyComponentLibrary from 'my-vue-component-library' Vue.use(MyComponentLibrary) ``` 或者在单个组件中按需引入: ```javascript import { MyComponent } from 'my-vue-component-library' export default { components: { MyComponent } } ``` 注意事项: 1. 组件的命名应具有唯一性,避免与现有组件冲突。 2. 在发布前,最好先在本地测试组件是否正常工作。 3. 如果组件库依赖于其他库,请确保在package.json中正确声明依赖。 4. 对于有组件库,可以使用npm库(如Verdaccio)或使用npm的付费服务。 以上步骤参考了引用[1]、[2]、[3]中关于封装Vue组件并发布到npm的内容。 §§相关问题§§ 1. 如何为Vue组件库编写文档? 2. 发布到npm时如何管理版本号? 3. 如何实现按需加载以减少组件库的体积? 4. 如何测试Vue组件以确保其质量?</think>### 如何封装 Vue 公共组件并发布到 npm 以下是完整的实现流程,结合 Vue 3 Composition API 和现代构建工具: #### 一、创建可复用组件(核心步骤) ```vue <!-- src/components/MyButton.vue --> <template> <button :class="['my-btn', type]" @click="handleClick" > <slot></slot> </button> </template> <script setup> import { defineEmits } from 'vue' const emit = defineEmits(['click']) const props = defineProps({ type: { type: String, default: 'primary', validator: val => ['primary', 'danger', 'warning'].includes(val) } }) const handleClick = () => { emit('click', '按钮点击事件') } </script> <style scoped> .my-btn { padding: 8px 16px; border-radius: 4px; cursor: pointer; } .primary { background: blue; color: white; } .danger { background: red; color: white; } </style> ``` #### 二、配置组件库入口 ```javascript // src/index.js import MyButton from './components/MyButton.vue' const components = { MyButton } const install = (app) => { Object.values(components).forEach(comp => { app.component(comp.name, comp) }) } export default { install, ...components } ``` #### 三、关键配置文件 1. **package.json** 配置: ```json { "name": "@yourname/my-component-lib", "version": "1.0.0", "main": "dist/my-component-lib.umd.js", "module": "dist/my-component-lib.es.js", "files": ["dist"], "scripts": { "build": "vite build", "prepublishOnly": "npm run build" }, "peerDependencies": { "vue": "^3.0.0" }, "devDependencies": { "vite": "^4.0.0", "@vitejs/plugin-vue": "^4.0.0" } } ``` 2. **vite.config.js** 构建配置: ```javascript import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' export default defineConfig({ plugins: [vue()], build: { lib: { entry: './src/index.js', name: 'MyComponentLib', fileName: (format) => `my-component-lib.${format}.js` }, rollupOptions: { external: ['vue'], output: { globals: { vue: 'Vue' } } } } }) ``` #### 四、发布到 npm ```bash # 登录 npm(首次需要) npm login # 构建生产包 npm run build # 发布 npm publish --access public ``` #### 五、在其他项目中使用 ```bash npm install @yourname/my-component-lib ``` ```javascript // main.js import { createApp } from 'vue' import MyComponentLib from '@yourname/my-component-lib' createApp(App) .use(MyComponentLib) .mount('#app') ``` ```vue <!-- 组件使用 --> <template> <MyButton type="danger" @click="handleClick"> 危险按钮 </MyButton> </template> ``` #### 最佳实践建议 1. **版本管理**:遵循语义化版本控制(SemVer),重大更新使用主版本号升级 2. **文档生成**:使用 [VitePress](https://vitepress.dev/) 或 [Storybook](https://storybook.js.org/) 创建组件文档 3. **按需加载**:通过 [unplugin-vue-components](https://github.com/antfu/unplugin-vue-components) 实现自动按需引入 4. **类型支持**:添加 TypeScript 类型声明文件(.d.ts) 5. **库**:企业内可使用 [Verdaccio](https://verdaccio.org/) 搭建npm 库 > 关键点:组件设计应遵循**单一职责原则**,props 设计要提供足够的扩展性,同时避免过度抽象[^1]。发布前务必在本地通过 `npm link` 测试组件功能[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值