npm作用域包
我们经常会看到软件包名前面带了个@,后面带个斜杠,例如:@scope/packagename。这种将相关软件包组合起来的方式,我们称之为作用域包。
作用域包会安装到文件夹的子文件夹中,例如:node_modules/@myorg/packagename。@myorg是作用域的名称,它可以包含任意数量的包。
npm install @myorg/mypackage
在package.json 显示:
"dependencies": {
"@myorg/mypackage": "^1.3.0"
}
在代码中的使用:
require('@myorg/mypackage')
发布作用域包
我们可以通过cli来发布(需要npm2.0或更高的版本支持)。发布作用域包默认会作为私有包处理,在npmjs.com网站上是需要付费的。所以我们需要发布公共的作用域包:
npm publish --access=public
作用域包在npm镜像源中的使用
通常我们设置镜像源:
npm config set registry=http://reg.example.com
这时作用域镜像源可以这样写:
npm config set @myorg:registry=http://reg.example.com
当我们npm install 作用域包时,会向指定的源发起请求,并且npm publish 发布作用域包也是同理。
npm link的妙用
在开发一个依赖包经常遇到一个问题,就是我们想检验自己的包是否可用,然后直接发布到npm官网,或者自建的私服,但是每次发布完发现一些问题,又得回去改完重新发布再继续调试,这种操作相当繁琐。
其实npm官方提供了一种调试方式:npm link命令。
npm link命令可以将任意位置的npm包链接到全局执行环境,从而在任意位置使用命令行都可以直接运行该 npm包。
首先,我们打开开发中的依赖包,运行
npm link
注意:依赖包的名称是取自package.json的name字段,而不是依赖包的文件夹名。 在开发过程中安装我们创建的依赖包,通过命令
npm link package-name
它会在项目中生成node_modules/package-name依赖包,包的内容指向package-name的目录。我们只需要修改package-name包,依赖它的项目也会同步更新,这样我们就不需要频繁的发布包,可以轻松愉悦的开发项目。
npx的妙用
npx是npm 5.2.0 以上自带的命令工具。通常我们调用项目安装的模块时是这样的:
通过package.json 的scripts字段调用:
"scripts": {
"webpack": "webpack -v"
}
或者在终端输入以下命令:
./node_modules/.bin/webpack -v
现在有了npx,我们可以这样:
npx webpack -v
npx的原理就是运行的时候,会到./node_modules/.bin路径和环境变量$PATH里面,检查路径是否存在。如果不存在,就会帮你安装再运行。
再如 npx http-server 可以一行命令帮你开启一个静态服务器。
npx http-server
npx: installed 30 in 10.284s
Starting up http-server, serving ./
Available on:
http://192.168.232.131:8080
http://127.0.0.1:8080
再如我们常用的@vue/cli工具,如果我们不想全局安装,只是临时使用一下,可以:
npx @vue/cli create myapp
npx会将@vue/cli安装在一个临时目录,等使用之后会自动删除。所以我们再次执行同样的命令,它会重新下载@vue/cli。
另外npx下载模块时,允许指定版本:
npx @vue/cli@4.0.0
使用不同版本的nodejs
npx node@12.0.0 -v