当前位置: 首页 > 后端技术 > Node.js

npm的package.json解析执行

时间:2023-04-03 19:19:01 Node.js

关于npm?世界上最大的软件注册中心。所有开源开发者都使用npm来共享和借用包,许多组织也使用npm来管理私有开发。npm包含三个不同的组件(不同的组件):websites:用于查找开源包CommandLineInterface(CLI):用于与npm服务器交互的终端,开发人员常用registry:大型Javascript软件公共数据库相关元信息参考LINK.npmignore放置在根目录或子目录中,以防止包含指定文件。如果放在根目录下,package.json中的files字段不会被覆盖,如果放在子目录下,files字段会被覆盖。工作方式同.gitignore。如果已经有.gitignore而没有.npmignore,那么将应用.gitignore中的内容。package.json#files中列出的文件不能被.npmignore或.gitignore排除(避免)。它将被包含,无论你是否在文件中设置它:package.jsonREADME[任何后缀,任何大小写]CHANGES/CHANGELOG/HISTORYLICENSE/LICENCENTICE“main”字段中的文件[package.json中main字段指向的条目。json文件]相反,下面的文件往往被设置为忽略。-lock.json(改用shrinkwrap)package.json组成一个包发布到registry必须包含package.json文件。目的:方便他人管理、安装和使用。Contains:lists列出自你的项目以来的所有包,包括开发依赖:devDependencies,生产依赖:dependencies。Specifyingthespecificpackageversionthatyouneedwhenusingsemanticversionrulesinyourprojectmakesyourbuildreproducible,andthereforeeasiertosharewithotherdevelopers(makeyourbuildrepeatable,soitiseasiertosharewithotherdevelopers)其他描述信息,例如as:description描述:让你的包更容易在网站上获取配置和使用环境变量varspackage.json中的字段会以npm_package_为前缀,成为环境变量,如:npm_package_name,npm_package_version//configurationport"config":{"port":8080}//通过npm运行脚本后,程序所在运行时可以访问这个npm变量,如:console.log(process.env.npm_package_config_port);//8080//如果此时发现8080端口被占用,如何在不修改package.json文件的情况下修改端口?修改项目路径下的终端(需要指定项目名称)npmconfigsetmy_project_name:port9090//查看全局变量console.log(process.env);//{...}//如果不指定项目名称,npmconfiguration后缀为np??m_confignpmconfigsetcolorfalse//查看npmconfiggetcolor//false//访问console.log(process.log)env.npm_config_color);//false可配置的属性如下:npm如何处理脚本?npmrun-script[--silent][--...]alias:npmrun##如果没有传递命令,会列出当前项目下所有可用的脚本##,分为:lifecycle(test,start,restart),直接运行的脚本(常见的自定义的)*parameter##在npm@2.0.0中,可以在计算脚本时使用自定义参数。使用特殊选项'--'分隔:npmruntest----grep="red"npm原理当执行npmrun时,会自动创建一个shell脚本,在shell中执行指定的脚本命令,所以:只要是环境中shell可以运行的命令,都可以写在npm的脚本中,并且可以作为参数传递。参考Special:npmrun创建的新shell会把当前目录下的node_modules/.bin子目录添加到PATH变量中。执行完成后,PATH变量会恢复到原来的状态。也意味着当前目录的node_modules/.bin子目录下的所有脚本都可以直接用脚本名调用,不需要加路径。比如当前项目的依赖中有mocha,直接写mochatest即可。“测试”:“摩卡测试”而不是以下内容。"test":"./node\_modules/.bin/mochatest"由于npm脚本的唯一要求就是可以在shell中执行,所以不一定是Node脚本,可以写任何可执行文件在里面。npm脚本的退出代码,同样遵守shell脚本规则。如果退出代码不为0,则npm认为脚本失败。