• [经验] 网络边界防御系统 NPS 是什么?
    网络边界防御系统(NPS)是一类面向网络边界的自动化防护产品,核心能力包括高精准威胁识别、出入站双向防护、高性能第三方联动,以及自动判断与封禁。微步OneSIG作为NPS赛道领航者,依托高精度威胁情报,可以识别外部入侵与失陷外联,并支持多维度阶梯封禁、0day漏洞防护、百万级封禁策略、主流厂商设备联动和AI中转站管控。 前不久,国内知名咨询机构数世咨询发布《新质·数字安全专精百强(2026)》,将网络边界防御系统NPS作为一个新品类列出。   这是一个有意思的事情。这么拥挤的边界安全市场,竟然还涌现出了一个新赛道。 审视当下企业面临的攻防态势,就不难理解NPS为何出现。IPS、NGFW、WAF等传统边界产品已问世近二十年,如今攻击的规模与自动化程度早就今非昔比,从告警到处置的延迟也变得愈发致命。在等待分析、研判、处置的时间内,攻击者往往已经开始横向移动,甚至非法窃取数据、实施破坏攻击。 NPS试图解决的痛点,正是做到发现即拦截处置,将时间差降为0。 01. NPS是什么?有什么能力?NPS的英文全称是Network-Perimeter Protection System,中文名称为网络边界防御系统。按照数世咨询给出的定义,NPS是基于攻击视角,从出入站双向精准识别和自动拦截网络攻击。 NPS的核心防护技术能力包括四项:l 高精准情报识别: NPS可以利用持续更新的威胁情报,精准识别网络流量中的威胁,为后续自动处置提供准确的检测结果。l 出入站双向防护:除外部入侵外,NPS还可以检测失陷主机发起的恶意外联,防止攻击者持续控制主机或展开后续攻击。l 高性能联动封禁:NPS可以承载大量动态封禁策略,并联动NDR、SOC/SIEM、SOAR等三方安全设备,在网络边界统一执行封禁。l 自动研判与封禁: NPS可以生成精准告警,根据检测结果自动执行拦截,缩短从发现威胁到处置完成的时间。 从能力来看,NPS主要解决的是网络边界的精准检测与自动响应处置,大幅减少需要人工研判的告警数量,缩短威胁发现到封禁拦截的时间。 这一点正是边界防御建设的初衷。 02.NPS与传统边界防护有什么区别?与其他细分安全赛道相比,边界安全是一个竞争激烈的存量市场。然而长期以来,边界防护设备主要面向合规驱动为主,同质化、低价竞争等问题十分严重。 IDC数据显示,2025年,中国网络安全硬件市场规模同比下降9.6%,并且连续两年持续下滑。作为其中的主要硬件设备,防火墙、入侵检测与防御等边界安全产品,已不足以满足用户持续变化的安全需求。 尤其是面对AI发起的海量自动化攻击,特征、行为都在快速变化,这对于边界安全产品的检测准确性、全面性,以及响应的时效性等方面,都提出了更高的要求。 那么相比IPS、NGFW、WAF等传统边界安全产品,NPS是通过什么解决这些问题的呢? NPS与IPS:更精准全面的检测能力IPS在2000年前后出现,实现对恶意流量的实时拦截。传统IPS以特征规则为核心检测引擎,对0day漏洞、未知攻击变种等新型威胁存在天然的识别短板。实际落地中,规则的持续堆叠易催生大量无效告警与误拦截,导致无法稳定启用自动阻断策略,难以充分发挥边界防御的实战价值。 相较于传统 IPS,NPS 以高精准威胁情报为核心,结合入侵防护能力,对入站攻击进行精准识别与自动阻断。同时,NPS还能对失陷反连进行防护,终止后续恶意攻击行为。NPS在大幅降低误报率的同时提升处置效率,真正落地边界侧的自动化防御闭环。 NPS与NGFW:专注新型威胁防护NGFW在2007年出现,主要用于增强传统防火墙对应用及其携带威胁的识别能力。从功能上看,NGFW十分全面,集成了访问控制、入侵防护、防病毒等多种功能模块。但受限于设备性能等多种因素,大多数时候只能作为一个普通的网络设备使用,缺乏必要的尤其是新型威胁防护能力,也无法承接海量的攻击IP/域名封禁需求。 NPS则专注于安全防护,性能相对充足,能够在精准识别内外部攻击的同时,自动或者联动第三方安全设备,封禁海量黑名单。 NPS与WAF:出入站双向防护2000年后Web应用日益复杂,WAF逐渐兴起,专门为Web应用提供防护。WAF主要负责检测入站的HTTP/HTTPS请求,通常不覆盖其他协议,也无法识别内网主机的恶意外联。 NPS可以同时识别外部入侵和失陷外联,同时补充WAF在协议范围的不足。 03.如何选择合适的NPS产品如果安全团队面临较大的处置压力、设备已经受限于性能,企业可以考虑展开同条件对比测试,用数据验证部署NPS的必要性。 NPS的能力可以通过以下几项指标进行评判:l 能力增量:在相同的网络流量和风险输入下,NPS能否发现现有IPS或NGFW未能稳定覆盖的入站攻击、失陷外联和恶意基础设施通信?l 告警降噪效果:NPS的告警是否精准可信,能为自动拦截提供落地条件,能否有效减少需要人工研判的告警数量?l 自动化处置质量:执行封禁速度提升后,误报和业务误封是否可控、策略能否及时生效、异常情况下是否支持快速恢复?l 工程能力:面对真实业务流量和大量动态策略,设备的吞吐、时延、并发连接和高可用能力如何?第三方风险结论能否稳定进入边界,执行结果能否及时反馈?l 部署方案:独立部署NPS、升级现有NGFW或IPS或采用其他方案,哪种方式更能缩短响应时间,同时控制建设运维成本? 04. NPS的现状与未来目前,边界安全建设主要以合规驱动为主。然而随着AI驱动的自动化攻击不断发展,NPS有着广阔的市场空间。数世咨询创始人李少鹏评认为:“NPS是一个非常具有创新性的边界安全产品,同时也很有可能会替代IPS这类传统的边界防护设备。” 在数世咨询发布的《中国数字安全价值图谱》中,微步在线、中盾网空和雨燕安全云被列为NPS领域的推荐企业。其中,微步在线被评为赛道领航者。作为业内最早研发NPS系统的企业之一,微步OneSIG的综合能力远超另外两家推荐企业。 微步的优势在于其强大的威胁情报能力。大多数边界防护设备主要依靠静态规则堆砌,缺乏对新型变种攻击以及失陷反连的识别能力,而且误报较多。微步OneSIG将高精度威胁情报、漏洞情报和入侵防护引擎结合,可同时检测外部入侵和失陷反连,定位失陷主机,误报率低于0.003%。即使是0day漏洞攻击,OneSIG也有非常好的检出效果。 在IP封禁决策中,OneSIG 支持自定义防护策略,综合威胁等级、IP信誉、攻击频率、地理位置等多维度条件对攻击IP执行阶梯封禁,且具备百万级策略的大规模封禁能力,有效解决人工研判效率不足、易产生误封的难题。OneSIG还可通过API、Syslog、FTP服务器等多种形式对接NDR、SIEM、XDR、SOAR等主流厂商设备完成联动阻断,最大化安全运营的协同效能。 针对新近爆发的AI中转站风险,OneSIG提供了在边界实时识别与管控的能力,可以基于情报识别相关访问行为,定位内网主机IP,并根据安全策略执行告警或实时阻断。 OneSIG已经广泛应用于金融、国央企、能源、教育、医疗等行业和政府机构,说明NPS已经引起了市场关注,正在走向规模化发展。 NPS将高精准识别、出入站双向防护、高性能联动、自动研判处置融入到边界安全体系。微步在线的OneSIG已围绕这些能力形成产品实践,并进一步覆盖0day漏洞防护、阶梯封禁和AI中转站管控等场景。NPS目前还处于品类形成期,但在威胁实效和处置规模要求高的场景中,已经展现了明确的优势。随着边界安全需求持续变化,NPS已越来越成为新时代边界安全的主流方案。
  • [技术干货] npm配置淘宝镜像的教程详解
    npm淘宝镜像,也称为npm cnpm或npm.taobao.org,是一个针对npm包管理器的国内镜像服务,通过设置npm淘宝镜像,你可以更快地下载和安装依赖,本文给大家介绍了npm配置淘宝镜像的教程,需要的朋友可以参考下1.直接配置1npm config set registry https://registry.npmmirror.com/​2.工具配置使用nrm配置,镜像地址为:npm registry manager2.1安装1npm install -g nrm open@8.4.2 --save2.2使用淘宝镜像1nrm use taobao2.3切换镜像1nrm ls2.4查看配置项1npm config list 3.总结方法两种各有各的好处;cnpm可以提高速度,但是npm也可以通过淘宝镜像进行加速,npm的使用率还是高于cnpm。转载自https://www.jb51.net/javascript/323540k0t.htm
  • [技术干货] 除了npm你还应该知道这些包管理工具
    前言:相信很多刚学习管理工具的同学都说从认识npm开始的,但是其他的包管理工具你都用过哪些,都知道它们的优缺点吗?今天就和大家一起探讨一下!主流的前端包管理工具有 npm、yarn、pnpm、以及国内的镜像 cnpm、tyarn 等,这是包管理器都是基于 nodejs。npm起源:npm 是 2010 年发布的 nodejs 依赖管理工具,在此之前,前端的依赖管理都是手动下载和管理的。优点:npm是一个成熟、稳定、并且有趣的包管理器。提供了一个非常有用的解决方案,支持大量的测试用例缺点:1.下载速度慢2.安装速度慢3.下载版本不一致注:npm5改进与yarn相差不大cnpm起源:国内使用npm下载太慢了,所以淘宝提供了镜像cnpm访问。优点:跟npm使用区别不大,npm是国外站点资源,cnpm是国内站点资源,当然国内站点的要快一点。缺点: npm有packge-lock.json是用来锁定安装的包的版本号,但是cnpm不受packge-lock.json的限制,cnpm只根据packge.json来下载安装包yarn起源:yarn 是 Facebook 于 2016 年 发布的替代 npm 的包管理工具,还可以作为项目管理工具,定位是快速、可靠、安全的依赖管理工具。缺点:1.存在幽灵依赖。2.提升的依赖依然复制多份的问题。优点:1.运行速度获得了显著的提高,整个安装时间也变得更少2.像npm同样,yarn使用本地缓存。与npm不一样的是,yarn无需互联网链接就能安装本地缓存的依赖项,它提供了离线模式。这个功能在2012年的npm项目中就被提出来过,但一直没有实现。3.容许合并项目中使用到的全部的包的许可证注:pnpm解决了yarn存在的问题。pnpm起源:是 2017 年发布的一款替代 npm 包管理工具,具有速度快、节省磁盘空间的特点。缺点:对老旧存量项目迁移pnpm可能需要踩坑优点:1.pnpm运行起来非常的快,超过了npm和yarn2.pnpm采用了一种巧妙的方法,利用硬链接和符号链接来避免复制所有本地缓存源文件,这是yarn的最大的性能弱点之一3.pnpm继承了yarn的所有优点,包括离线模式和确定性安装4.pnpm 内置了对单个源码仓库中包含多个软件包的支持5.pnpm 创建的 node_modules 并非扁平结构,因此代码不能对任意软件包进行访问转载自https://www.duidaima.com/Group/Topic/OtherTools/9569
  • [问题求助] 紧急!! 使用Scaffolding magno ui 离线开发高级页面组件预览报错
    环境为:在点击本地预览的时候不断报错 麻烦尽快解决 急!!
  • [技术干货] npm install安装报错:gyp info it worked if it ends with ok的解决方法【转载】
    今天新启动一个项目,在 npm install 安装依赖项时出现报错,所以下面这篇文章主要给大家介绍了关于npm install安装报错:gyp info it worked if it ends with ok的解决方法,需要的朋友可以参考下目录• 1.可能原因1:node和node-sass版本冲突, • 2.node.js卸载与安装 • 3.node-sass卸载安装, • 4.安装好后对应版本的node和node-sass后启动 • 总结 前端vue新项目 npm install安装报错 gyp info it worked if it ends with ok1.可能原因1:node和node-sass版本冲突,对应的node和node-sass的版本如下2.node.js卸载与安装之前有安装过弄过node.js的如果node.js版本过高需要重新安装低版本node.js,在控制面板卸载node.js,再在node官网 下载对应的msi包安装到之前的安装过node.js的文件夹下。低版本的node.js 只需直接下载高版本的msi包安装无需卸载之前的低版本node.js,这样不需要再去配置环境变量啥的,3.node-sass卸载安装,node-sass卸载:1npm uninstall node-sassnode-sass安装可以指定版本:npm install node-sass 布置的版本直接安装npm install node-sass@4.14.0 指定4.14版本的,如果安装报错试试换下淘宝镜像,一个好的解决方案在是直接在项目根目录下创建一个 .npmrc文件指定淘宝镜像文件内容:sass_binary_site=https://npm.taobao.org/mirrors/node-sass/ phantomjs_cdnurl=https://npm.taobao.org/mirrors/phantomjs/ electron_mirror=https://npm.taobao.org/mirrors/electron/ registry=https://registry.npm.taobao.org4.安装好后对应版本的node和node-sass后启动再npm install , npm run dev 没有报错啦总结到此这篇关于npm install安装报错:gyp info it worked if it ends with ok解决的文章就介绍到这了转载自https://www.jb51.net/article/255441.htm
  • [技术干货] 设置npm的registr
    1.原npm地址npm config set registry http://registry.npmjs.org 2.设置国内镜像a.通过config命令npm config set registry https://registry.npm.taobao.org  npm info underscore (如果上面配置正确这个命令会有字符串response)b.命令行指定npm --registry https://registry.npm.taobao.org info underscore c.编辑 ~/.npmrc 加入下面内容registry = https://registry.npm.taobao.org3.使用nrm管理registry地址a.下载nrmnpm install -g nrmb.添加registry地址nrm add npm http://registry.npmjs.orgnrm add taobao https://registry.npm.taobao.orgc.切换npm registry地址nrm use taobaonrm use npm清除代理npm config rm proxy npm config rm https-proxy
  • [技术干货] 设置npm的registr
    1.原npm地址npm config set registry http://registry.npmjs.org 2.设置国内镜像a.通过config命令npm config set registry https://registry.npm.taobao.org  npm info underscore (如果上面配置正确这个命令会有字符串response)b.命令行指定npm --registry https://registry.npm.taobao.org info underscore c.编辑 ~/.npmrc 加入下面内容registry = https://registry.npm.taobao.org3.使用nrm管理registry地址a.下载nrmnpm install -g nrmb.添加registry地址nrm add npm http://registry.npmjs.orgnrm add taobao https://registry.npm.taobao.orgc.切换npm registry地址nrm use taobaonrm use npm清除代理npm config rm proxy npm config rm https-proxy
  • [技术干货] 【Devcloud】npm构建之下载依赖报错篇
            大家好,沉寂了多日,我静下心来梳理高频报错,发现npm构建中的一个小问题屡屡映入眼帘,这个可恨的报错卡点,今天就让我们将他连精神带肉体统统扫进历史的大垃圾箱中!       首先我们看一下报错现象~:       npm ERR! notarget No matching version found for @vue/babel-preset-app@^4.5.19   日志显示,我们找不到这个依赖包,可是不科学啊,我的任务明明几个小时前还完全正常,并且我没有改动过任何代码,怎么会找不到呢?相信电视机前的小伙伴内心都会跟我产生同样的疑惑!下面我来为大家答疑解惑!以下是排查并解决问题的几个步骤~1.我们去浏览器里访问npm的官网:https://www.npmjs.com/,找到我们的当事人:@vue/babel-preset-app ~把这个组件名称输入进去如图:2.点击下图标红位置,查看该组件的版本发布历史,原来npm官网上4个小时前更新了这个包的版本!找到原因啦,因为直接从npm官网下载镜像会很慢,所以我们在华为云devcloud云端编译构建的时候,默认使用的是我们华为云的开源镜像站,以便于提高用户的构建速度!但是这个包官方刚刚才更新,我们的华为云镜像站还没有同步这个镜像。3.好的,既然原因我们已经找到了,那该如何解决呢?答:最快速简单的办法,就是把版本号往前移一位。换一个稍微旧点的版本,我们拿这个5.0.6的版本来代替。另外我们可以通过这种方式来查看我们华为云上当前提供的最新镜像版本:https://mirrors.huaweicloud.com/repository/npm/“组件名称”,比如这样:方法一:找到我们的代码仓库-package.json文件~ 进行如下修改:方法二:进入我们的编译构建任务-npm构建的命令行内增加这个命令:npm install @vue/babel-preset-app@5.0.64.执行构建查看结果,ok,构建成功~这类问题大家学会了嘛?小伙伴们,我们下期再见!
  • [技术干货] 设置npm的registry
    1.原npm地址npm config set registry http://registry.npmjs.org 2.设置国内镜像a.通过config命令npm config set registry https://registry.npm.taobao.org  npm info underscore (如果上面配置正确这个命令会有字符串response)b.命令行指定npm --registry https://registry.npm.taobao.org info underscore c.编辑 ~/.npmrc 加入下面内容registry = https://registry.npm.taobao.org3.使用nrm管理registry地址a.下载nrmnpm install -g nrmb.添加registry地址nrm add npm http://registry.npmjs.orgnrm add taobao https://registry.npm.taobao.orgc.切换npm registry地址nrm use taobaonrm use npm清除代理npm config rm proxy npm config rm https-proxy
  • [技术干货] 详解npm脚本和package.json
    npm是什么npm是前端开发广泛使用的包管理工具,它让js开发者分享、复用代码更方便。可以重复的框架代码被称为包(package)或者模块(module),一个包可是是一个文件夹里放着几个文件夹,还有一个package.json文件。1、什么是npm脚本  在创建node.js项目如一个vue项目,或一个react项目时,项目都会生成一个描述文件package.json 。比如npm允许在package.json文件里面,使用scripts字段定义脚本命令。1234567891011{//..."scripts": { "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", "start": "npm run dev", "e2e": "node test/e2e/runner.js", "test": "npm run e2e", "lint": "eslint --ext .js,.vue src test/e2e/specs", "build": "node build/build.js" },}  上面代码是package.json文件的一个片段,里面的scripts字段是一个对象。它的每一个属性,对应一段脚本。比如,build命令对应的脚本是node build.js 。  命令行下使用npm run 命令,就可以执行这段脚本。$ npm run build  等同于执行:$ node build/build.js  同理,上面的那段scripts中, npm run test 等同于 npm run e2e , 等同于 node test/e2e/runner.js  这些定义在package.json里面的脚本,就称为npm脚本。项目的相关脚本,可以集中在一个地方;不同项目的脚本命令,只要功能相同,就可以有同样的对外接口。比如用户不需要知道怎么测试你的项目,只要运行 npm run dev 即可  查看当前项目的所有npm脚本命令,可以使用不带任何参数的 npm run 命令。$ npm run2、npm原理  npm脚本的原理非常简单。每当执行 npm run ,就会自动创建一个shell脚本, 在这个shell里面执行指定的脚本命令。因此,只需要是shell (一般是bash) 可以运行的命令,就可以写在npm脚本里面。  比较特别的是,npm run 新建的这个shell, 会将当前目录的node_modules/.bin 子目录加入PATH 变量,执行结束后,再将PATH变量恢复原样。还意味着,当前目录的node_modules/.bin 子目录里面的所有脚本,都可以直接用脚本名调用,而不必加上路径。比如,当前项目的依赖里面有Mocha, 只要直接写 mocha test 就可以了。"test": "mocha test"  而不用写成下面这样。"test": "./node_modules/.bin/mocha test"  由于npm脚本的唯一要求就是可以在shell中执行,因此它不一定是Node脚本,任何可执行文件都可以写在里面。npm脚本的退出码,也遵守shell脚本规则。如果退出码不是0,npm 就认为这个脚本执行失败。3、通配符  由于npm脚本就是shell脚本,因此可以使用shell通配符。12"lint": "jshint *.js""lint": "jshint **/*.js"  上面代码中,* 表示任意文件名,**表示任意一层子目录。如果要将通配符传入原始命令,防止被shell转义,要将*号转义。"test": "tap test/\*.js"4、传参  向npm脚本传入参数,要使用 -- 标明。"lint": "jshint **.js"  向上面的 npm run lint 命令传入参数,必须写成下面这样。1$ npm run lint -- --reporter checkstyle > checkstyle.xml 也可以再package.json里面封装一个命令。12"lint": "jshint **.js","lint:checkstyle": "npm run lint -- --reporter checkstyle > checkstyle.xml"5、执行顺序  如果npm脚本里面需要执行多个任务,那么需要明确它们的执行顺序。如果是并行执行(即同时的平行执行),可以使用 & 符号。$ npm run script1.js & npm run script2.js  如果是继发执行(即只有前一个任务成功,才能执行下一个任务),可以使用 && 符号。$ npm run script1.js && npm run script2.js6、默认值  一般来说,npm脚本由用户提供。但是,npm对两个脚本提供了默认值。也就是说,这两个脚本不用定义,就可以直接使用。12"start": "node server.js","install": "node-gyp rebuild"  上面代码中,npm run start 的默认值是 node server.js, 前提是项目根目录下有server.js这个脚本;npm run install 的默认值是node-gyp rebuild, 前提是项目根目录下有binding.gyp文件。7、钩子  npm脚本有pre何post两个钩子。举例来说,build脚本命令的钩子就是prebuild和postbuild。123"prebuild": "echo I run before the build script","build": "cross-env NODE_ENV=production webpack","postbuild": "echo I run after the build script"  用户执行npm run build的时候,会自动按照下面的顺序执行。1npm run prebuild && npm run build && npm run postbuild  因此,可以在这两个钩子里面,完成一些准备工作和清理工作。下面是一个例子:123"clean": "rimraf ./dist && mkdir dist","prebuild": "npm run clean","build": "cross-env NODE_ENV=production webpack" npm默认提供下面的这些钩子:12345678prepublish,postpublishpreinstall,postinstallpreuninstall,postuninstallpreversion,postversionpretest,posttestprestop,poststopprestart,poststartprerestart,postrestart  自定义的脚本命令也可以加上pre和post钩子。比如,myscript这个脚本命令,也有premyscript和postmyscript钩子。不过,双重的pre和post无效,比如prepretest和postposttest是无效的。  npm提供一个npm_lifecycle_event变量,返回当前正在运行的脚本命令,比如pretest、test、posttest等等。所以,可以利用这个变量,在同一个脚本文件里面,为不同的npm scripts命令编写代码。请看下面的例子:12345678910111213const TARGET = process.env.npm_lifecycle_event; if (TARGET === 'test') { console.log(`Running the test task!`);} if (TARGET === 'pretest') { console.log(`Running the pretest task!`);} if (TARGET === 'posttest') { console.log(`Running the posttest task!`);}  注意,prepublish这个钩子不仅会在npm publish 命令之前运行,还会在npm install (不带任何参数)命令之前运行。这种行为很容易让用户感到困惑,所以npm 4引入了一个新的钩子prepare, 行为等同于prepublish, 而从npm 5开始,prepublish 将只在npm publish命令之前运行。8、简写形式  四个常用的npm脚本有简写形式。npm start 是 npm run start 的简写 npm stop 是 npm run stop 的简写 npm test 是 npm run test 的简写 npm restart 是 npm run stop && npm run restart && npm run start 的简写  npm start 、npm stop、npm restart都比较好理解,而npm restart 是一个复合命令,实际上会执行三个脚本命令:stop、restart、start 。具体的执行顺序如下:prerestart prestop stop poststop restart prestart start poststart postrestart9、变量  npm脚本有一个非常强大的功能,就是可以使用npm的内部变量。首先,通过npm_package_ 前缀,npm脚本可以拿到package.json里面的字段。比如,下面是一个package.json。1234567{ "name": "foo",  "version": "1.2.5", "scripts": { "view": "node view.js" }}那么,变量npm_package_name返回foo, 变量npm_package_version返回 1.2.5 。123// view.jsconsole.log(process.env.npm_package_name); // fooconsole.log(process.env.npm_package_version); // 1.2.5  上面代码中,我们通过环境变量process.env 对象,拿到package.json 的字段值。如果是bash脚本,可以用$npm_package_name和$npm_package_version娶到这两个值。npm_package_ 前缀也支持嵌套的package.json字段。1234567"repository": {"type": "git","url": "xxx"},scripts: {"view": "echo $npm_package_repository_type"}  上面代码中,repository字段的type属性,可以通过 npm_package_repository_type取到。下面是另外一个例子:123"scripts": { "install": "foo.js"}  上面代码中,npm_package_scripts_install变量的值等于foo.js 。  然后,npm 脚本还可以通过npm_config_ 前缀,拿到npm的配置变量,即npm config get xxx 命令返回的值。比如,当前模块的发行标签,可以通过npm_config_tag取到。"view": "echo $npm_config_tag",  注意,package.json里面的config对象,可以被环境变量覆盖。12345{  "name" : "foo", "config" : { "port" : "8080" }, "scripts" : { "start" : "node server.js" }}  上面代码中,npm_package_config_port 变量返回的是8080。这个值可以用下面的方法覆盖。$ npm config set foo:port 80  最后,env命令可以列出所有环境变量。"env": "env"10、常用脚本示例1234567891011121314151617181920212223242526// 删除目录"clean": "rimraf dist/*", // 本地搭建一个 HTTP 服务"serve": "http-server -p 9090 dist/", // 打开浏览器"open:dev": "opener http://localhost:9090", // 实时刷新 "livereload": "live-reload --port 9091 dist/", // 构建 HTML 文件"build:html": "jade index.jade > dist/index.html", // 只要 CSS 文件有变动,就重新执行构建"watch:css": "watch 'npm run build:css' assets/styles/", // 只要 HTML 文件有变动,就重新执行构建"watch:html": "watch 'npm run build:html' assets/html", // 部署到 Amazon S3"deploy:prod": "s3-cli sync ./dist/ s3://example-com/prod-site/", // 构建 favicon"build:favicon": "node scripts/favicon.js",11、package.json其他配置项说明对于dependencies和devDependencies的一些说明:  使用npm安装依赖时,如果使用--save安装的依赖,会被写到dependencies模块里面去;  而使用--save-dev安装的依赖,则会被写到devDependencies模块里面去;如果什么都不写,则默认安装到dependencies里面去。  比如我们使用的一些构建工具例如glup、webpack这些只在开发环境中才用到的包,则只需要写到devDependencies中即可。  对于两种环境的指定方式,则是通过配置文件中的 process.env.NODE_ENV = 'development' 或 process.env.NODE_ENV = 'production' 来指定是开发还是生产环境。12、package.json中的bin属性  package.json中的bin是命令名和本地文件的映射。如果是全局安装,则会把文件映射到全局的bin里面去,安装后,在任意地方打开终端使用命令行执行该文件;如果是本地安装,则会把文件映射到本项目的./node_modules/.bin文件夹里面,安装后,在本工程目录里面使用命令行执行该文件。  举例说明:新建一个文件夹,打开终端,进入该文件夹,通过命令 npm init -y 创建一个package.json文件。然后在package.json文件同级目录下新建一个index.js文件,加上测试数据。注意,index.js文件的头部必须有这个 #!/usr/bin/env node 节点。在package.json中增加bin属性,设置命令名和index.js的映射关系。在终端当前目录中进行全局安装: npm install -g 安装成功后,则在电脑任意文件夹打开终端,执行package.json中bin中设置的命令,都会执行对应的index.js中的代码。 如下图
  • [知识分享] npm install xxxx --legacy-peer-deps命令是什么?
    本文分享自华为云社区《[npm install xxxx --legacy-peer-deps命令是什么?为什么可以解决下载时候产生的依赖冲突呢?](https://bbs.huaweicloud.com/blogs/349716?utm_source=csdn&utm_medium=bbs-ex&utm_campaign=paas&utm_content=content)》,作者: gentle_zhou 。 在日常使用命令npm install / npm install XX下载依赖的操作中,我经常会遇到无法解析依赖树的问题(依赖冲突): ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/29/1651195648725373976.png) 但是每当遇到这种情况的时候,我用命令npm install --legacy-peer-deps就可以顺利进行下载操作: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20224/29/1651195659271721613.png) 这是为什么呢?带着好奇心,我去研究学习了一番npm install xxxx --legacy-peer-deps命令是什么?为什么可以解决下载时候产生的依赖冲突呢?(注:我本地当前正在使用的npm版本是8.6.0) **本文导航**:什么是peerDependency?;npm install xxxx --legacy-peer-deps命令是什么?为什么可以解决下载时候产生的依赖冲突呢?;参考资料。 # 什么是peerDependency? 我们日常在前端项目开发过程中,见到最多的一定是package.json文件里的devDependencies(用于在开发环境下依赖的模块)和dependencies(无论开发环境还是生产环境都需要的依赖模块)这两个字段(感兴趣的小伙伴可以看我这篇文章:[package.json文件里的dependencies和devDependencies有什么区别吗?](https://bbs.huaweicloud.com/blogs/346736))。 那么命令--legacy-peer-dep里的peerDependency是什么依赖呢?根据geeksforgeeks网站里的定义: >Peer Dependencies: In package.json file, there is an object called as peerDependencies and it consists of all the packages that are exactly required in the project or to the person who is downloading and the version numbers should also be the same. That is the reason they were named as peerDependencies. The best example is ‘react’ which is common in every project to run similarly. 翻译一下就是说,在package.json文件中,存在一个叫做peerDependencies(对等依赖关系)的对象,它包含了项目里需要的所有的包或则用户正在下载的版本号相同的所有的包(很绕,但意思就是对等依赖关系指定我们的包与某个特定版本的npm包兼容);对等依赖关系最好的例子就是React,一个声明式的创建用户界面的JS库。 那么我们为什么需要对等依赖关系呢? 假设我们现在有一个HelloHWCloud工程,已经在其根目录下的package.json文件中的dependencies字段里声明了packageA作为依赖,而其下面有两个项目app_A和app_B,它们也依赖packageA。如果我们用dependencies而不是peerDepenedencies来声明,那么npm install安装完项目之后的依赖结构如下图所示: ├── HelloHWCloud │ └── node_modules │ ├── packageA │ ├── app_A │ │ └── nodule_modules │ │ └── packageA │ └── app_B │ │ └── nodule_modules │ │ └── packageA 从上图可以看出,packageA依赖包被安装了3次,造成了2次安装冗余。 而如果采用peerDepenedency来下载,就可以避免这个核心依赖库被重复下载的问题。还是上面那个场景,我们在项目app_A和app_B的package.json文件里的peerDependencies字段声明一下核心依赖库packageA,然后在根目录的package.json文件里的dependencies字段也声明一下packageA。接着再执行npm install,生成的依赖结构就会如下图所示: ├── HelloHWCloud │ └── node_modules │ ├── packageA │ ├── app_A │ └── app_B 如上图所示,packageA就只会被安装一次。因此,npm 从**版本v7**开始,install就默认以peerDependencies的方式去下载了: 1. 如果用户在根目录的package.json文件里显式依赖了核心库,那么各个子项目里的peerDepenedencies声明就可以忽略 2. 如果用户没有显式依赖核心库,那么就按照子项目的peerDepenedencies中声明的版本将依赖安装到项目根目录里 而方式2就会导致一个问题:用户依赖的包版本与各个子项目依赖的包版本相互不兼容,那么就会报错(无法解析依赖树的问题(依赖冲突))让用户自行去修复,因而导致安装过程的中断。(因为是从npm v7引入的,因此npm v3-v6就不会发生这个错误) # npm install xxxx --legacy-peer-deps命令是什么?为什么可以解决下载时候产生的依赖冲突呢? npm install xxxx --legacy-peer-deps命令与其说是告诉npm要去干什么,不如说是告诉npm不要去干什么。 legacy的意思:遗产/(软件或硬件)已过时但因使用范围广而难以替代的;而npm install xxxx --legacy-peer-deps命令用于绕过peerDependency里依赖的自动安装;它告诉npm忽略项目中引入的各个依赖模块之间依赖相同但版本不同的问题,以npm v3-v6的方式去继续执行安装操作。 所以其实该命令并没有真的解决冲突,而是忽略了冲突,以“过时”(v3-v6)的方式进行下载操作。 # 参考资料 1. https://classic.yarnpkg.com/en/docs/dependency-types 2. https://github.blog/2021-02-02-npm-7-is-now-generally-available/ 3. https://blog.logrocket.com/whats-new-in-npm-v7/ 4. https://stackoverflow.com/questions/66239691/what-does-npm-install-legacy-peer-deps-do-exactly-when-is-it-recommended-wh
  • [Node.js] 带你了解Node.js包管理工具:包与NPM
    >摘要:包与NPM Node组织了自身的核心模块,也使得第三方文件模块可以有序的编写和使用。本文分享自华为云社区[《NodeJs深入浅出之旅:包与NPM》](https://bbs.huaweicloud.com/blogs/307034?utm_source=zhihu&utm_medium=bbs-ex&utm_campaign=other&utm_content=content),作者:空城机。 # 包与NPM Node组织了自身的核心模块,也使得第三方文件模块可以有序的编写和使用。 但是在第三方模块中,模块与模块之间仍然是散列在各地的,**相互之间不能直接引用** 所以在模块外,包和NPM是将模块联系起来的机制。 - 包组织模块示意图 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/27/141323rxr3v28syu8prqok.png) CommonJS 的包规范定义其实也很简单,由包结构和包描述文件两部分组成。 # 包结构 用于组织包中的各种文件,是一个存档文件,即一个目录直接打包为.zip或tar.gz格式的文件。 符合规范的包目录: - package.json: 包描述文件 - bin: 用于存放可执行二进制文件的目录 - lib: 用于存放JavaScript代码的目录 - doc: 用于存放文档的目录 - test: 用于存放单元测试用例的代码 # package.json包描述文件 NPM所有行为都与包描述文件的字段息息相关 一些字段: - name: 包名。 规范定义需要用小写的字母和数字组成,不允许出现空格。 包名必须是唯一的,以免对外公布时产生重名冲突 - description: 包简介 - version: 版本号,关于其介绍在《Node.js学习(一)——简介》也有提及 - keywords: 关键字数组, NPM中主要用来作分类搜索。 - maintainers: 包维护者列表。 每个维护者由name、email和web这3个属性组成。 NPM通过这个属性进行权限认证。 格式: ```"maintainers":[{ "name":"kongchengji", "email":"111@.com", "web":"[http:](https://blog.csdn.net/qq_36171287)" }]``` - contributors: 贡献者列表,格式与维护者列表相同 - bugs: 一个可以反馈bug的网页地址或邮件地址 - licenses: 当前包所使用的许可证列表,表示包在哪些许可证下使用 格式: "licenses":[{ "type": "GPLv2", "url":"" }] // 或者 "license": "ISC" - repositories: 托管源代码的位置列表,表明可以通过哪些方式和地址访问包源代码。 - 格式: - "repository": { - "type": "git", - "url": "git+https://github.com/kongchengji/UiSelfMade.git" - }, - dependencies: 使用当前包所需要依赖的包列表。 这个属性非常重要 - homepage: 当前包的网站地址 - os: 操作系统支持列表, 如果列表为空,则不对操作系统做任何假设 - cpi: CPU架构支持列表 - engine:支持的JavaScript引擎列表 - directories:包目录说明 - implements: 实施规范的列表。 标志当前包实现了CommonJS哪些规范 - scripts: 脚本说明对象。 主要用于被包管理器用来安装、编译、测试和卸载包 "scripts": { "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", "start": "npm run dev", "lint": "eslint --ext .js,.vue src", "build": "node build/build.js" }, NPM与包规范区别在于多了四个字段: - author: 包作者 :ok_man: - bin: 一些包作者希望包可以作为命令行工具使用。 - main: 模块引入包时,会有限检查这个字段,并将其作为包中其余模块的入口模块。 如果不存在,require会查找包目录下的index.js、index.node、index.json作为默认入口 - devDependencies: 一些模块只在开发时需要依赖。 devDependencies:开发环境使用 dependencies:生产环境使用 # 前后端共用模块 JavaScript在Node出现后,有一项优势 --> 一些模块可以在前后端实现共用。 但是前后端上始终还是有一些差别的 :sweat_drops: # 前后端模块侧重点 前后端JavaScript分别搁置在HTPP的两端,扮演的角色并不同。 浏览器端的JavaScript需要经历从同一个服务器端分发到多个客户端执行,瓶颈是带宽,从网络加载代码 服务器端的JavaScript是相同代码需要多次执行,瓶颈是CPU和内存等资源,从磁盘中加载 在前端JavaScript中,主要还是应用**AMD规范**。 CommonJS并不完全适用于前端JavaScript,比如Node的模块引入基本是同步的,但是前端引入如果使用同步引入,UI在初始化过程中需要花费很多时间等待脚本加载完成。 # AMD规范 AMD规范 是CommonJS规范的一个延伸,全称:Asynchronous Module Definition。 是异步模块定义 模块定义:define(id?, dependencies?, factory); id 是模块的名字,它是可选的参数。 dependencies 指定了所要依赖的模块列表,它是一个数组,也是可选的参数 AMD需要在声明模块时指定所有的依赖,通过形参传递依赖到模块内容中: define(['./a', './b'], function (dep1, dep2) { a.doSomethimg() b.doSomething() }); # CMD规范 与AMD规范相对的还有CMD规范,全称:Common Module Definition。 是公共模块定义 这是由国内的玉伯(也是一位大佬)提出的 模块定义:define(factory) CMD支持动态引入: define(function(require, exports, module) { var a=require('./a') a.doSomethimg() var b=require('./b') b.doSomething() }) 在需要依赖模块时, 随时调用require()引入即可 CMD 推崇依赖就近; AMD 推崇依赖前置 CMD 是延迟执行; AMD 是提前执行 CMD性能好,因为只有用户需要的时候才执行; AMD用户体验好,因为没有延迟,依赖模块提前执行了 AMD和CMD最大的区别是对依赖模块的执行时机处理不同 # 兼容多种模块规范 创建一个hello方法,让hello方法能在不同运行环境中运行,兼容Node、AMD、CMD和常见浏览器 匿名函数前加一个;是个好习惯 name是方法名,definition是方法体 通过typeof检测环境是否为AMD或CMD还是Node环境 可以将模块执行结果挂载在window变量中,这样可以直接调用 // 匿名函数前加一个;是个好习惯 name是方法名,definition是方法体 ;(function (name, definition) { //检查环境是否是AMD或CMD var hasDefine = typeof define === 'function', // 检查环境是否为Node hasExports = typeof module !== 'undefined' && mudule.exports; if(hasDefine) { define(definition); } else if (hasExports) { module.exports = definition(); } else { // 将模块的执行结果挂在window变量中,在浏览器中this指向window对象 this[name] = definition(); } })('hello', function () { var hello = function () { console.log('hello'); } return hello; });
  • [Node.js] npm install windows-build-tools 卡住不动,安装脚本自带bug?
    本文借鉴于CSDN博主「FencingMan-X」,向博主致敬! 原文链接:https://blog.csdn.net/oqzuser1234asd/article/details/116169889 ## 1、问题描述 通过npm install windows-build-tools来获取Python2.7环境时,windows-build-tools不能正常完成安装。## 2、问题现象 执行npm install --global --production windows-build-tools 卡在reify:ajv这个步骤页面不动了 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/26/162118ts5sdazepbjewv9j.png)## 3、问题原因 Windows-build-tools脚本存在问题,无法找到VS构建工具安装程序的日志文件。似乎VS构建工具安装程序创建的日志文件已更改。该脚本正在文件夹%USERPROFILE%\ AppData \ Local \ Temp中寻找名称以dd_client_开头的日志文件,但是VS构建工具安装程序似乎并未创建任何以dd_client_开头的文件。 (这是windows-build-tools安装脚本的一个BUG,感兴趣可以查看github的issue:https://github.com/felixrieseberg/windows-build-tools/issues/244 )## 4、解决方案 1、打开资源管理器(左下角搜索-资源管理器或者直接window+E),在路径处输入`%temp%` ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/26/1624238npxgdvhhxaneopn.png)2、在`%temp%`文件夹中找到最新的文件名类似于`dd_installer_20211126145101.log`的文件,查看此文件,确保日志中输出了`Closing the installer with exit code 0` ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/26/162725ebzcg9iytjuksanc.png)3、在`%temp%`目录下创建一个名为`dd_client_.log`的文件 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/26/162803fe8slef4aadwrio4.png)4、编辑创建的文件,加入一行`Closing installer. Return code: 3010.`然后保存。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/26/1628553ucgb4o2myf9kfal.png)5、回到执行安装命令的窗口,敲一下回车,即会继续安装windows-build-tools的步骤。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/26/162931zhl0hcczsyq3h8e7.png)6、安装成功后,新打开一个终端窗口,检查Python版本 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/26/163011v64vnvvveh7dyxrj.png)## 后语 其实Python环境在安装步骤卡着不动时就已经安装好了,只是环境变量没有配置好。 * 下面是我在安装途中卡住的时候的截图: >![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/26/163048dj2vdvzniyvbzfrv.png)* Python所在文件位置 >![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202111/26/163112xiho5iyekad1l2x1.png)
  • [问题求助] CloudIDE安装 npm install 时报错误
    CloudIDE安装 npm install 时报如下错误,请问是什么问题呢这个是DevStar里在线像素绘图工具里的请问这是什么问题呢
  • npm发布包以及更新包还有需要注意什么问题
    npm发布包以及更新包还有需要注意什么问题
总条数:41 到第
上滑加载中