问题总结----解决npm install下载chromedriver@2.46.0依赖包超级慢问题

本文介绍了一种在使用gitlab-runner部署前端项目时,解决chromedriver下载速度慢的方法。通过修改Dockerfile配置,指向国内镜像源,实现了快速下载,提高了部署效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、问题出现原因

使用gitlab-runner部署前端js项目时,下载chromedriver@2.46.0有时候相当的慢。

主要原因是npm install老去国外github下载

> chromedriver@2.45.0 install /app/node_modules/chromedriver
> node install.js

Current existing ChromeDriver binary is unavailable, proceding with download and extraction.
Downloading from file:  https://chromedriver.storage.googleapis.com/2.45/chromedriver_linux64.zip
Saving to file: /app/node_modules/chromedriver/chromedriver/chromedriver_linux64.zip
...

后来去放置gitlab-runner那台主机wget一下,结果一直响应中

cuiyf@gitlabrunner:~$ wget https://chromedriver.storage.googleapis.com/2.46/chromedriver_linux64.zip
--2019-08-05 17:46:32--  https://chromedriver.storage.googleapis.com/2.46/chromedriver_linux64.zip
Resolving chromedriver.storage.googleapis.com (chromedriver.storage.googleapis.com)... 216.58.200.48, 2404:6800:4008:801::2010
Connecting to chromedriver.storage.googleapis.com (chromedriver.storage.googleapis.com)|216.58.200.48|:443... connected.
HTTP request sent, awaiting response... 

二、解决思路

设法使其去淘宝镜像源地址下载

https://registry.npm.taobao.org/

三、解决方案

由于我是用docker部署的,修改Dockerfile添加如下配置
npm install chromedriver --chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver

FROM cuiyf/node:8.12.0-alpine as build-stage

COPY . /app
WORKDIR /app

RUN npm config set registry http://172.18.0.1:9000/repository/node-public \
 && npm install chromedriver --chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver\
 && npm install

RUN npm run build
FROM cuiyf/nginx:1.13.12-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

最终效果,快速的去淘宝源下载去了

> chromedriver@2.46.0 install /app/node_modules/chromedriver
> node install.js

Current existing ChromeDriver binary is unavailable, proceding with download and extraction.
Downloading from file:  http://cdn.npm.taobao.org/dist/chromedriver/2.46/chromedriver_linux64.zip
Saving to file: /app/node_modules/chromedriver/2.46/chromedriver/chromedriver_linux64.zip
Received 808K...
Received 1652K...
Received 2459K...
Received 3258K...
Received 4092K...
Received 4922K...
Received 5277K total.
Extracting zip contents
Copying to target path /app/node_modules/chromedriver/lib/chromedriver
Fixing file permissions
Done. ChromeDriver binary available at /app/node_modules/chromedriver/lib/chromedriver/chromedriver

四、终极方案

新建一个镜像吧,包括下载node-sassphantomjselectron

FROM node:8.12.0-alpine

LABEL QianJia.cuiyufeng <1627999813@qq.com>

ENV SASS_BINARY_SITE=http://172.17.3.95:9000/repository/node-saas/ \
 PHANTOMJS_CDNURL=http://172.17.3.95:9000/repository/phantomjs/ \
 ELECTRON_MIRROR=http://172.17.3.95:9000/repository/electron/ \
 CHROMEDRIVER_CDNURL=http://172.17.3.95:9000/repository/chromedriver/

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
 && apk add --no-cache tzdata \
 && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
 && echo "Asia/Shanghai" > /etc/timezone \
 && rm -rf /var/cache/apk/* /tmp/* /var/tmp/* $HOME/.cache 
### 如何提高 Google Cloud Storage 文件下载速度 为了提升从 `storage.googleapis` 下载文件的速度,可以从多个角度进行优化: #### 1. 使用就近地理位置的服务节点 选择离自己最近的Google Cloud区域来存储数据能够减少网络延迟并加快传输速率。如果可能的话,在创建存储桶时指定靠近目标用户的地区[^1]。 #### 2. 启用对象版本控制与生命周期管理政策 虽然这主要是针对长期保存成本考虑的功能,但是合理设置也可以间接影响性能表现。例如,对于频繁访问的对象保持最新版本在线可加速读取操作;而对于不常使用的旧版则可以迁移至冷线存储降低费用而不占用热存储空间从而维持较高I/O效率。 #### 3. 利用多部分并发下载技术 当面对大尺寸单个文件时,将其分割成若干个小片段同时拉取能显著缩短总耗时。许多编程语言库都支持这种模式下的高效处理方式。下面是一个Python脚本的例子展示如何实现这一点: ```python import os from google.cloud import storage def download_blob_in_chunks(bucket_name, source_blob_name, destination_file_name): """Downloads a blob from the bucket using multiple threads.""" client = storage.Client() bucket = client.bucket(bucket_name) blob = bucket.blob(source_blob_name) chunk_size = 5 * 1024 * 1024 # Set your desired chunk size here (e.g., 5MB chunks). start_byte = 0 end_byte = None with open(destination_file_name, 'wb') as f: while True: media_range = f"bytes={start_byte}-" if end_byte is not None: media_range += str(end_byte) response = requests.get( blob.media_link, headers={"Range": media_range}, stream=True ) content_length = int(response.headers['Content-Length']) if content_length == 0: break for data in response.iter_content(chunk_size=chunk_size): f.write(data) start_byte += content_length if content_length < chunk_size or 'content-range' not in response.headers.lower(): break download_blob_in_chunks('example-bucket', 'large-file.zip', '/path/to/local/large-file.zip') ``` 此代码段展示了怎样利用HTTP范围请求头(`Range`)分片获取远程资源,并逐步写入本地磁盘完成整个文件组装过程[^4]。 #### 4. 考虑使用CDN服务 将静态内容部署在全球分布式的边缘位置有助于改善全球范围内终端客户的加载体验。尽管这不是直接改变源站本身的特性,但对于某些特定类型的资产来说确实是个不错的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值