npm:全称nodepackagemanager,是世界上最大的包管理系统。官网介绍了Buildamazingthings...那我们就来看看他做了什么Amazingthing吧~1.默认npminit大家肯定不陌生,npminit-y就可以了,这次我们来仔细看看{"name":"webyouxuan","version":"1.0.0","main":"index.js","scripts":{},"license":"ISC"}这里先声明一下版本npm是6.7.0,因为我的node版本是v11.14.0,下面一一说比较重要的字段:name,version,main,scripts,licensename是当前包的名字,也就是name最终发布在npm官网上的包。它不能与现有包同名!version是当前包的版本号。我们主要是想探讨一下如何优雅的管理版本号。main是当前包的入口文件,默认使用require导入的文件。scripts可以配置一些执行脚本。许可证是协议许可证。二、npminstall1、全局安装npminstallhttp-server-g全局安装的意思很简单,就是将安装的模块全局安装,安装的包可以直接在命令行使用,其实,只在/user/local/bin目录下做一个链接,这个文件连接到/usr/local/lib/node_modules/http-server/bin/http-server。当我们执行http-server命令时,链接的文件将被调用。因为mac有权限问题,所以这里加上sudo来执行命令。我们可以尝试自己写一个包,创建一个bin目录,添加一个www文件。叫什么名字都无所谓~#!/usr/bin/envnodeconsole.log('关注webyouxuan哈');//#!这句话的意思是node是用来执行这个文件的。同样,shell可以代表sh更新package.json文件"bin":{"youxuan":"./bin/www"//这里注意名字一定要和你创建的文件夹一样},好了,写它!这里不说发包,用一个普通的命令,可以实现链接功能:npmlink[图片上传失败...(image-a09819-1567445632022)]这样我们就可以直接在命令行输入youxuan打印出去关注网优轩!2.本地安装npminstallwebpack--save-dev本地安装很好理解,正所谓在项目中使用,而不是在命令行中使用!这里我们看到生成了一个package-lock.json文件,安装的modules已经放到了node_modules下,并且json中添加了一些新的内容"devDependencies":{"webpack":"^4.39.3"}这里先简单介绍一下基本用法--save-dev表示当前依赖只在开发时应用。如果默认不写,相当于--save,项目依赖开发和上线需要。也可以指定版本号安装Packagenpmijquery@2.2.0#install可以简写为i。默认情况下,npmi将在项目中安装所有必需的依赖项。如果只想在生产环境安装依赖,可以加上--production参数3.package-lock文件来自npm5后,所有依赖包采用扁平化管理方式。package-lock.json的作用是锁定依赖的安装结构,保证在任何一台机器上执行npminstall都会得到完全相同的node_modules结果,因为package-lock.json存储了所有安装的信息。"name":"youxuan","version":"1.0.0","lockfileVersion":1,"requires":true,"dependencies":{"@webassemblyjs/ast":{"version":"1.8.5",//当前依赖版本"resolved":"https://registry.npm.taobao.org/@webassemblyjs/ast/download/@webassemblyjs/ast-1.8.5.tgz",//来自哪个渠道安装"integrity":"sha1-UbHF/mV2o0lTv0slPfnw1JDZ41k=",//contenthash"dev":true,"requires":{"@webassemblyjs/helper-module-context":"1.8.5","@webassemblyjs/helper-wasm-bytecode":"1.8.5","@webassemblyjs/wast-parser":"1.8.5"}},...如果手动更新package.json文件,安装命令将下载对应新版本,并且会自动更新锁文件~4.依赖方式简单介绍一下常用的依赖方式:1.dependencies项目依赖可以使用npminstall-S或者npminstall--save保存到dependencies,发布到npm时依赖项下的模块将作为依赖项一起下载!2.devDependencies可以使用npminstall-D或者npminstall--save-dev将开发依赖保存到dependencies中。发布到npm时,不会自动下载devDependencies下的模块。如果只是简单的开发项目依赖,devDependencies只会起到提示作用!3.同一个版本的peerDependencies依赖同一个依赖。如果你安装我,你最好安装我相应的依赖。如果不安装,会报警告"peerDependencies":{"jquery":"2.2.0"}npmWARNyouxuan@1.0.0requiresapeerofjquery@2.2.0butnoneisinstalled.必须自己安装peerdependencies4.bundledDependenciesbundledependencies"bundleDependencies":["jquery"],bundleddependencies会在使用npmpack打包tgz时打包在一起。5.optionalDependencies如果发现可选依赖无法安装或者找不到,不会影响npm的安装。五。npm版本管理npm采用semver规范作为依赖版本管理方案。Semver约定一个包的版本号必须包含3个数字MAJOR.MINOR.PATCH表示主版本号。次要版本号。Revision版本号MAJOR对应大版本号迭代,当修改不兼容旧版本时必须更新MAJOR版本号MINOR对应小版本号迭代。当发生兼容旧版本API的修改或功能更新时,更新MINOR版本号。major#主版本号加1,其余版本号属于0npmversionminor#次版本号加1,修订号赋0。标识含义:范围含义例子^2.2.1指定MAJOR版本号,所有更新版本匹配2.2.3、2.3.0;不匹配1.0.3,3.0.1~2.2.1指定MAJOR.MINOR版本号接下来所有更新的版本匹配2.2.3,2.2.9;不匹配2.3.0,2.4.5>=2.1版本号大于等于2.1.0匹配2.1.2,3.1<=2.2版本号小于等于2.2匹配1.0.0,2.2.1,2.2.111.0.0-2.0.0从1.0.0(含)到2.0.0(含)的版本号匹配1.0.0、1.3.4、2.0.0预发布版本:alpha(α):预览版,或内测版;一般不对外发布,会有很多bug;一般只供测试人员使用。beta(β):测试版,或公测版;这个阶段的版本会一直添加新功能;它将在alpha版本之后推出。rc(releasecandidate):最终测试版;它可能成为最终产品的候选版本,如果没有问题,就可以作为正式版本发布。声明为2.1.0-beta.1的版本的用户不会立即使用它,但可以用于测试。6.脚本配置在package.json中可以定义自己的脚本通过npmrun来执行"scripts":{"hello":"echowebyouxuan","build":"webpack"}我们可以使用npmrunhello来执行scripts,也可以使用npmrunbuild来执行node_modules/.bin目录下的webpack文件。npmrun命令执行时,./node_modules/.bin/目录会被添加到执行环境的PATH变量中,所以如果一个命令行包不是全局安装的,而是只安装在当前项目的node_modules中,这个命令也可以通过npmrun来调用。执行npm脚本时传入参数,需要在命令后加上--,比如npmrunhello----port3000,可以将--port参数传递给hello命令npm提供了两种hook机制,前和后。定义某个脚本前后的执行脚本。如果没有定义,默认忽略"scripts":{"prehello":"echofollow","hello":"echowebyouxuan","posthello":"echothankyou~"}可以比较打印globalenv和项目下执行npmrunenv对比PATH属性,不难发现执行npmrun时确实会把./node_modules/.bin/目录加入到PATH中七。协议不废话,这张图说明为什么MITlicense是最大的!八、npx的用法npx命令是npmv5.2之后引入的新命令,npx可以帮助我们直接执行node_modules/.bin文件夹下的文件1.执行脚本npxwebpack是不是省略了?脚本脚本已配置!2.避免安装全局模块全局安装的模块会导致很多问题,例如:多个用户全局安装不同版本的模块npxcreate-react-appreact-project我们可以直接使用npx来执行模块,会先安装,安装执行后,下载的模块会被删除,这样就可以一直使用最新版本了!9.包的发布比较简单。首先,我们需要切换到官方来源。这里有个好用的工具nrmnpminstallnrm-gnrmusenpm#切换到官方源后更新名称,也可以在这里发布选择版本的scope包,忽略文件夹,使用.npmignore,一切准备就绪后,发布!!!npmpublishok,我们的包可以成功发布到npm了!10.更多内容请参考2018,你还只知道npminstall吗?npm官网如何选择开源许可证?
