当运行npm install 命令的时候带上ignore-scripts,会发生什么?
摘要:运行npm install 命令的时候带上ignore-scripts, 可以避免一个恶意包里的病毒。
本文分享自华为云社区《运行npm install 命令的时候带上--ignore-scripts有什么好处吗?》,作者:gentle_zhou。
在npm依赖库里,当前有超过130多万的依赖包可以被下载使用(数据来源:https://en.wikipedia.org/wiki/Npm_(software) )。但其中会不会有一些是恶意依赖包呢,这真的说不定。
因此在Predicting the Future of the Web Development (2020 and 2025)这场演讲中,推荐我们设置:npm config set ignore-scripts true:

或则就如我们标题里说的,在安装依赖包时,确保添加–ignore-scripts后缀以禁止npm里第三方依赖包的预先安装脚本或则安装后脚本被执行;这样就可以避免一个恶意包里的病毒。
但是问题来了,有些依赖包就是需要这些预先安装脚本或则安装后脚本来配置环境;如果如果我们在下载的时候,命令里用了–ignore-scripts后缀,那么是可以减轻恶意代码的危害,但同时也会导致下载的依赖包没有正常发挥作用。
那么我们如何知道什么时候可以使用–ignore-scripts后缀享受它的好处呢?就是说我们怎么样可以预先了解哪些依赖包需要脚本文件,我们不能使用–ignore-scripts后缀呢?
我们可以预先先去下载can-i-ignore-scripts 这个依赖包:
A service and cli to analyze your dependencies and check what’ll break when you switch from npm ci to npm ci --ignore-scripts
can-i-ignore-scripts工具,可以帮助我们分析各个依赖包是否可以使用--ignore-scripts命令。该工具可以帮助我们确定哪些依赖包可以使用--ignore-scripts命令;实际上呢,一些我们已经运行了几个月的脚本是没啥问题的,而该工具可以帮助我们确定新加入的依赖包是否可以加入到没问题列表中。
如何下载这个工具呢?很简单,可以直接在工具官网下载或则通过npx命令行npx can-i-ignore-scripts (npx是什么?后面计划会出一篇文章介绍一下;现在可以就理解成是npm的一个包执行器,能让npm包中的命令行工具和其他可执行文件在使用上变得更加简单)。
如何使用这个工具呢?我们去安装了node_modules包的目录下运行can-i-ignore-scripts命令去查看(下面是官方给出的例子):
naugtur@localtoast:~/repo/ [main]$ can-i-ignore-scripts
█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█
▄▄· ▄▄▄· ▐ ▄ ▄ ▄▄ ▐ ▄ ▄▄▄ ▄▄▄ ·▄▄▄▄•
▐█ ▌▐█ ▀█ •█▌▐█ ██ ██ ▐█ ▀ █▌▐█ ▐▄ █· █ ▀· .▀· .█▌
██ ▄▄▄█▀▀█ ▐█▐▐▌ ▐█· ▐█· ▄█ ▀█▄ ▐█▐▐▌ ▄█▀▄ ▐▀▀▄ ▐█▀ ▄█▀▀▀•
▐███▌▐█ ▐▌██▐█▌ ▐█▌ ▐█▌ ▐█▄ ▐█ ██▐█▌▐█▌.▐▌▐▄ █▌▐█▄▄▄▌ ▀
·▀▀▀ ▀ ▀ ▀▀ █ ▀▀▀ ▀▀▀ ·▀▀▀▀ ▀▀ █ ▀█▄▀.▀ ▀ ▀▀▀ ▀ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
Found following packages with scripts:
[ ignore ] 'monorepo-symlink-test' has scripts but they can be ignored
reason: false positive
[ ignore ] 'ejs' has scripts but they can be ignored
reason: funding
[ ignore ] 'core-js' has scripts but they can be ignored
reason: funding
参考资料
- https://www.youtube.com/watch?v=24tQRwIRP_w&t=923s
- https://stackoverflow.com/questions/59471962/how-does-npm-behave-differently-with-ignore-scripts-set-to-true
- https://www.npmjs.com/package/can-i-ignore-scripts
当运行npm install 命令的时候带上ignore-scripts,会发生什么?的更多相关文章
- 运行npm install命令的时候会发生什么?
摘要:我们日常在下载第三方依赖的时候,都会用到一个命令npm install,那么你知道,在运行这个命令的时候都会发生什么吗? 本文分享自华为云社区<运行npm install命令的时候会发生什 ...
- npm install命令详解
-S,–save 安装包信息将加到dependencies(生产阶段的依赖) npm install --save 或 npm install -S -D, –save-dev 安装包信息将加到dev ...
- 关于 npm install 命令
使用 `npm install` 命令安装模块时 ,有以下几种形式: 安装模块到项目 node_modules 目录下,不会将模块依赖写入 dependencies 或 devDependencies ...
- vs2015 打开项目自动运行 npm install
问题:VS2015(visual studio 2015) 打开项目自动运行 npm install 解决办法: 打开工具-选项-项目与解决方案--外部web工具 去掉npm勾选 还有如果文件g ...
- npm install命令对package-lock.json文件自动做了一些额外的更新
今天我使用 npm 命令给项目安装file-saver,通过git却发现package-lock.json中除了file-saver组件之外的其他组件的记录也被改了 npm为何会自动做这些更改呢,又如 ...
- npm install 命令。默认会找到当前路径下的package.json。然后安装其中的依赖
npm install 命令.默认会找到当前路径下的package.json.然后安装其中的依赖 By default, npm install will install all modules li ...
- IDEA -01 -忽略指定文件夹 -防止加载Vue-cli执行"npm install"命令后的项目时卡死
问题描述 Vue的"npm install" 命令执行后,会生成一个很大的目录层次的"node_modules",文件十分繁多; idea加载这个项目下的文件夹 ...
- elasticsearch-head-master下运行npm install报npm WARN elasticsearch-head@0.0.0 license should be a valid SPDX license expression
2个月没有启动es和es配套服务,今天运行时,发现如下问题: 运行npm install 出现npm WARN elasticsearch-head@0.0.0 license should be a ...
- Nodejs中npm install 命令的问题
在使用nodejs的npm包管理工具中碰到过许多个坑,在网上查了很久才解决,现在加以总结. 两种安装方式(本地安装,全局安装) 1.全局安装(npm install -g moduleName/npm ...
随机推荐
- 多态,动态方法调度(dynamic method dispatch)?
8.多态Polymorphism,向上转型Upcasting,动态方法调度(dynamic method dispatch) 什么叫多态?简言之,马 克 - t o - w i n:就是父类引用指向子 ...
- JavaScript操作checkbox复选框
运行效果: 源代码: 1 <!DOCTYPE html> 2 <html lang="zh"> 3 <head> 4 <meta char ...
- window.location.href用法与a标签的比较
1.在使用这两种方法进行页面的跳转时,这两种方法都能够有效的实现该功能 但是其原理不尽相同 第一:window.location.href()方法必须书写在js中 <html> <h ...
- EMS查看单个邮箱的已用空间
Exchange查询单个邮箱用户使用状态. 查看用户"wsj"的邮箱使用状态 键入以下命令: Get-MailboxStatistics wsj | FL DiplayName,T ...
- sourceCRT设置全局字符集为utf-8
以前刚打开服务器crt字符集都会默认是default模式,搞得每次都要手动设置成UTF-8. 烦躁. 将CRT全局字符集设置成UTF-8格式方法: 设置窗口不会断掉: 即每100s发送一次ls \n ...
- JAVA学习2——HelloWorld
Java语言的诞生.版本以及工具:Java的安装开发环境以及环境变量的配置:第一个Java程序--HelloWorld
- Java学习day11
如果程序出现了问题,我们没有做任何处理,JVM会做默认处理,即:把异常的名称,原因和位置等信息输出在控制台,程序停止执行 一个简单的检测集合对象是否含有某元素,有就再添加一个某元素 public cl ...
- CDN绕过
信息收集_CDN绕过 什么是CDN?为什么要绕过? CDN全称是内容分发网络(content delivery network).其目的是让用户能够更快速的得到请求的数据. 网上找了一张图片, ...
- IDEA SpringBoot-Mybatis-plus 实现增删改查(CRUD)
上一篇: IDEA SpringBoot-Mybatis实现增删改查(CRUD) 下一篇:Intellij IDEA 高效使用教程 (插件,实用技巧) 最好用的idea插件大全 一.前言 Mybati ...
- GO 前后端分离开源后台管理系统 Gfast v2.0.4 版发布
更新内容:1.适配插件商城,开发环境从后台直接安装插件功能:2.代码生成细节修复及功能完善(支持生成上传文件.图片及富文本编辑器功能):3.增加swagger接口文档生成:4.更新goframe版本至 ...