一大波精彩文章等待您的发现~
## 上传文件 ```js // 单个文件 function uploadSingleFile() { const formData = new FormData(); const fileField = document.querySelector('input[type="file"]'); formData.append('username', 'abc123'); formData.append('avatar', fileField.files[0]); fetch('https://example.com/profile/avatar', { method: 'PUT', body: formData, }) .then((response) => response.json()) .then((result) => { console.log('Success:', result); }) .catch((error) => { console.error('Error:', error); }); } // 多个文件 function uploadMultipleFiles() { const formData = new FormData(); const photos = document.querySelector('input[type="file"][multiple]'); formData.append('title', 'title'); for (let i = 0; i < photos.files.length; i++) { formData.append(`photos_${i}`, photos.files[i]); } fetch('https://example.com/posts', { method: 'POST', body: formData, }) .then((response) => response.json()) .then((result) => { console.log('Success:', result); }) .catch((error) => { console.error('Error:', error); }); } ```
# 示例代码 ts代码: ```ts import {Component, forwardRef, Input} from '@angular/core'; import {ControlValueAccessor, NGACCESSOR} from "@angular/forms"; @Component({ selector: 'app-test-component', templateUrl: './app-test-component.html', providers: [ { provide: NGACCESSOR, useExisting: forwardRef(() => TestComponent), multi: true } ] }) export class TestComponent implements ControlValueAccessor { value: any; valueChange: (value: any) => void; onTouched: () => void; @Input() disabled = false; / 表单模型的值发生变化时,将值写到自定义控件中 / registerOnChange(fn: (value: any) => void): void { this.valueChange = fn; } / 通过此函数通知表单模型标记控件的触摸状态touched为true / setDisabledState(isDisabled: boolean): void { this.disabled = isDisabled; } } ``` html代码: ```html <input [(ngModel)]="value" (ngModelChange)="valueChange($event)" [disabled]="disabled" /> ```
## 设置镜像源 Docker默认的源为国外官方源,下载速度较慢,可改为国内源,常见的国内源有: Docker国内镜像源:https://registry.docker-cn.com 中国科技大学源:https://docker.mirrors.ustc.edu.cn 网易源:https://hub-mirror.c.163.com 百度源:https://mirror.baidubce.com 腾讯源:https://ccr.ccs.tencentyun.com 阿里云:https://www.aliyun.com/product/acr, 在控制台中选择"镜像加速器",复制加速地址,添加到配置文件中 编辑配置文件,一般刚开始是不存在的,需要手动创建 ```bash vim /etc/docker/daemon.json ``` 在文件中添加以下内容 ```json { "registry-mirrors": ["https://registry.docker-cn.com"] } ``` 重启daemon进程 ```bash systemctl daemon-reload ``` 重启Docker服务 ```bash systemctl restart docker ```
优势 1、多语言支持:Nexus Repository Manager 支持多种包管理系统,如 npm、Maven、NuGet、Docker、RubyGems等。 2、适合企业级环境,能够管理多种开发语言和工具链。 3、提供全面的权限管理、访问控制和审计功能。 4、支持高级缓存和代理功能,以提高依赖解析的性能。 5、企业级支持:Sonatype Nexus 提供商业支持和高级功能,适合需要专业支持的大型企业。支持高可用性和集群部署,以确保系统的可靠性和可扩展性。 6、用户界面和集成:提供直观的用户界面,支持与 CI/CD 工具、LDAP/Active Directory 集成。 优势 1、轻量级:Verdaccio 是一个轻量级的私有 npm 注册表,安装和配置相对简单,适合中小型项目。资源消耗较少,适合部署在资源有限的环境中。 2、快速部署:使用简单,支持通过 Docker 等多种方式快速部署,适合开发者自行搭建的环境。 3、社区支持:开源且拥有活跃的社区支持,提供及时的更新和社区驱动的功能改进。 4、灵活配置:支持多种身份验证机制,如 LDAP、GitHub、GitLab 等。 # 推送到私服仓库 添加以下配置到package.json中 ```json { "publishConfig": { "registry": "https://npm.example.com" } } ``` 然后执行 ```bash npm publish ```