首页 > 系统相关 >了解package.json中npm run命令的执行原理,以及直接运行shell命令

了解package.json中npm run命令的执行原理,以及直接运行shell命令

时间:2024-07-24 13:24:51浏览次数:17  
标签:npm node shell run 脚本 modules 命令 bin

了解npm run

package.json文件中的script字段,可以定义脚本命令,通过npm run指令运行该脚本。

比如简单定义一个输出打印的shell脚本。

{
  "script": {
    "hw": "echo hello world!"
  }
}

执行npm run hw可以看到终端上打印出了hello world!

我们可以在很多工程项目中的package.json文件中看到定义了很多脚本命令,比如下面的:

{
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lint": "vue-cli-service lint"
  }
}

那么npm是如何启动这些脚本的呢?

执行原理

在执行npm run xxx指令的时候会创建一个shell,在shell中执行对应的脚本。

shell会将当前项目的可执行依赖目录(node_modules/.bin)添加到环境变量path中,当执行之后恢复原样(本地模块可以直接运行,不需要全局安装NPM模块)。也就是说脚本命令中的依赖名会直接找到node_modules/.bin下面的对应脚本,而不需要加上路径。

而在.bin目录下,一般针对一个依赖模块,会有3个可执行文件,没有后缀名的是对应Unix系的shell脚本,.cmd为后缀名的是windows bat脚本,.ps1为后缀名的则是PowerShell中可执行文件(可以跨平台),三者作用都是用node执行一个js文件。

比如说在项目中安装了vite依赖,由于vite依赖库中定义了bin,在安装后就会在项目的node_modules/.bin目录中简历一个软连接到vite依赖中。

打开vite看看那个文件里有啥:

前面提到,脚本命令中的依赖名会直接找到node_modules/.bin,在上图中可以看到这个软连接其实就是指向了node_modules/webpack中的bin目录。

可以直接写成如下:

"scripts": {"build": "webpack"}

而不需要写成

"scripts": {"build": "node_modules/.bin/webpack"}

标签:npm,node,shell,run,脚本,modules,命令,bin
From: https://blog.csdn.net/weixin_44786530/article/details/140625339

相关文章

  • PostgreSQL数据库常用命令
    1.登录PostgreSQL数据库:psql-Upostgres-hlocalhost-p5432mydatabase2.登陆到指定数据库psql-Uroot-dmydatabase;3.查看表和数据:3.1列出所有数据库:\l3.2连接到数据库:\cmydatabase3.3列出当前数据库的所有表:\dt3.4查看某个表的内容:SELECT*FR......
  • 1.Linux环境下Anaconda搭建及常用命令
    1.简介pip是Python的包管理工具,可以安装和卸载软件包,但是无法管理python的版本等功能conda是一个开源的包管理工具和环境管理系统,可以管理不同版本的Python以及非Python包,适用于多种语言,如Python,Java,C/C++等等,可以创建和管理独立的环境Anaconda是一个包含大量科学包及......
  • 无法在 Linux 中使用 pip 安装 Pillow(错误:命令“gcc”失败,退出状态为 1)
    我一直在尝试使用pip安装Pillow包(python版本3.6,Pillow版本8.4,Linux虚拟机)。其他几个答案建议安装开发人员包,但我没有sudo权限。我收到“致命错误:Python.h:没有这样的文件或目录”和“错误:命令'gcc'失败,退出状态1”“我都尝试过:python3-mpipinstallPillo......
  • SQL 命令在手动运行时工作正常(SQL Developer),但在 Python 的 oracledb 模块中给出 ORA-
    我正在使用OracleSQL数据库,并且我想运行该命令ALTERSESSIONSETNLS_DATE_FORMAT='YYYY-MM-DD';当我从SQLDeveloper应用程序手动运行它时,它工作正常。但是,当我使用oracledb模块从Python运行它时,出现以下错误:ErrorrunningSQLscript:ORA-00922:mi......
  • 为什么 Runtime.getRuntime().exec 在 Tomcat 中以 root 身份分叉进程?
    我正在使用Runtime.getRuntime().exec(...)从Tomcatweb应用程序中执行python脚本。当我在我的开发环境中时一切都很顺利(Eclipse通过Sysdeo-Plugin运行我的本地Tomcat(位于/home/me/opt/tomcat))。当我在生产环境(=DebianSqueeze)中运行我的web应用程序时,会出现此问题......
  • 【openGauss】openGauss误truncate表恢复
    【openGauss】openGauss误truncate表恢复前提操作前提回收站已开启操作/*查回收站参数*/selectname,setting,unit,contextfrompg_settingswherename~*'bin';/*查回收站对象*/select*frommy_recyclebin;--truncate\drop/*恢复对象*/......
  • certmgr.msc 命令
    要删除Fiddler2软件相关的证书,您可以按照以下步骤进行操作:打开Windows操作系统的“证书管理器”:可以通过在开始菜单或运行对话框中输入certmgr.msc命令,或者在控制面板中找到“证书”或“证书管理器”来打开。在证书管理器中找到“个人”存储区:展开“个人”存储区,然......
  • 运维过程中用到的一些关于防火墙的命令
    1iptables:2iptables-AINPUT-s<ip>-jAEEEPT允许特定ip访问所有端口3iptables-F清除所有规则4iptables-AINPUT-ilo-jACCEPT允许本地回环接口通信5sudoiptables-AINPUT-mconntrack--ctstateESTABLISHED,RELATED-jACCEPT6允许已经建立......
  • windows 系统下常用命令
    根据进程名称查找进程PID>tasklist|findstrchrometasklist命令详解tasklist命令显示本地计算机或远程计算机上当前正在运行的进程列表。命令结合筛选器一起使用,可以按照我们的需求进行过滤,查找我们需要了解的进程信息。tasklist替换tlist.exe工具。findstr命令详......
  • PS启动时提示找不到vcruntime140.dll怎么办?打开Photoshop显示“vcruntime140.dll”弹
    在使用备受欢迎的AdobePhotoshop图像处理软件时,一些用户或许会碰到“系统提示找不到vcruntime140.dll”的错误,致使软件无法正常启动。要知道,vcruntime140.dll作为MicrosoftVisualC++Redistributable的组成部分,对基于VisualC++编译的应用程序运行极为关键。本篇将为大家带来......