前端内网开发npm 安装的几种方法

1、介绍

最近有同学问我,怎么在不联网的情况下安装依赖。一般我们开发都是有网的,那么配置一下register一下镜像路径就可以从国内的阿里云,淘宝,华为云,腾讯云等国内镜像文件。

有些同学开发项目会在内网开发,所以就需要离线去npm install一些依赖。

2、非联网/离线安装方法
---2.1搭建内网私服

我先通过一台电脑搭建一个内网服务,verdaccio是一个轻量级的私有npm代理注册服务

复制代码
//先安装一个代理服务
npm install -g verdaccio

//运行
verdaccio

//运行后的默认端口是4873,此时我们就可以设置镜像路径为这个代理地址
npm set registry http://localhost:4873/

//其他需求,如果你想要发布资源,推送到这个地址
npm publish --registry http://localhost:4873/

//项目成员安装依赖
npm install <package> --registry http://localhost:4873/

//也可以在项目中创建一个.npmrc文件
registry=http://localhost:4873/
---2.2npm pack 归档文件

重点讲一下这个方法

思路:首先我们用一台电脑,联网状态,去把所有依赖全部安装好,然后通过代码打成压缩包,拷贝到指定目录下

跟随潮流,同ts来吧,基础的创建项目啥的就不说了,讲重点

创建完项目后,如果需要用到ts,就执行这个命令tsc --init去创建一个tsconfig.json文件,在这个文件中将module:""设置为commonjs,即module:"commonjs",这里涉及到.js,.cjs,.mjs几种后缀的知识点,有机会再讲。。。

这里为什么要用commonjs,因为我们在编写代码的时候,是用的esm,esm不支持__dirname,__dirname只能在cjs中使用,后面我们编译出来就是cjs

我用去新建一个index.ts文件

复制代码
import { exeSync } from 'node:child-process'
import fs from 'node:fs'
import path from 'node:path'

//存放我们打包后的文件目录
const packageDir = path.join(__dirname, './packages')
//存在则不需要重复打包
if(!fs.existsSync(packageDir)){
    fs.mkdirSync(packageDir, {recursive: true})
}
//读取node_modules文件目录下的文件
const node_modules = path.join(__dirname, './node_modules')

function buildPackage() {
    const dirFileList = fs.readdirSync(node_modules ).filter(dit => {
        //排除.开头文件和@符号开头文件,其他请自行排除
        return !(dirFileList .startWith('.') || dirFileList .startWith('@'))
    })
    //遍历所查询到的文件
    dirFileList && dirFileList .map(dir => {
        //拿到文件的完整路径,后续打包路径
        const modules = path.join(node_modules, dir)
        //打包命令,需要引用,在第一行
        exeSync('npm pack', { cwd: modules })
        //将打包完的tgz文件找到
        const tgzfile = fs.readdirSync(modules).find(file => {
            return file.endsWith('.tgz')
        })
        if(tgzfile){
            //将找到的打包tgz文件移动到指定的package目录中
            fs.renameSync(path.join(modules,tgzfile), path.join(packageDir,tgzfile))
        }
        
    })
}
//执行
buildPackage()

//安装命令
npm install ./packages/xxxx.tgz
---2.3U盘拷贝

这个就不多说了

相关推荐
你脸上有BUG11 分钟前
【工程化】记给ant-design-vue打补丁的示例
前端·javascript·vue.js·补丁·ant-design-vue
灰灰勇闯IT1 小时前
Flutter for OpenHarmony:布局组件实战指南
前端·javascript·flutter
⑩-1 小时前
Vue框架学习
前端·vue.js·学习
a程序小傲1 小时前
京东Java面试被问:基于Gossip协议的最终一致性实现和收敛时间
java·开发语言·前端·数据库·python·面试·状态模式
小二·2 小时前
Python Web 开发进阶实战:AI 原生应用商店 —— 在 Flask + Vue 中构建模型即服务(MaaS)与智能体分发平台
前端·人工智能·python
Devlive 开源社区2 小时前
技术日报|推理RAG文档索引PageIndex登顶日增1374星,React视频工具Remotion二连冠进前二
前端·react.js·前端框架
xkxnq2 小时前
第三阶段:Vue 路由与状态管理(第 45 天)(路由与状态管理实战:开发一个带登录权限的单页应用)
前端·javascript·vue.js
方方洛2 小时前
技术实践总结:schema-bridgion:json、xml、yaml、toml文件相互转换
xml·前端·typescript·node.js·json
object not found2 小时前
基于uniapp开发小程序自定义顶部导航栏状态栏标题栏
前端·javascript·小程序·uni-app
We་ct3 小时前
LeetCode 28. 找出字符串中第一个匹配项的下标:两种实现与深度解析
前端·算法·leetcode·typescript