xiaochengzi6 / Blog

个人博客
GNU Lesser General Public License v2.1
0 stars 0 forks source link

npm 学习笔记 #29

Open xiaochengzi6 opened 2 years ago

xiaochengzi6 commented 2 years ago

安装

npm install <package_name>

命令执行之后将会在当前的目录下创建一个 node_modules 的目录(如果不存在的话),然后将下载的包保存到这个目录下。

默认是在本地也就是这个文件夹下安装包。瞎子啊问的文件保存在node_modules目录下的 .bin中。

可以选择去全局安装

npm install -g <package_name>

局部安装

npm install <package_name>

全局安装目录可以使用以下命令查看地址。

npm root -g
或者
在 运行 中输入 %AppData%/npm 打开此文件夹

本地安装目录:node_modules

离线安装:

npm install --cache-min Infinity <package-name>

但是,这并不等于离线模式,这时[仍然需要](https://github.com/npm/npm/issues/2568#issuecomment-172430897)网络连接。因为现在的--cache-min实现有一些问题。

(1)如果指定模块不在缓存目录,那么 npm 会连接 registry,下载最新版本。这没有问题,但是如果指定模块在缓存目录之中,npm 也会[连接 registry](https://github.com/npm/npm/issues/2568#issuecomment-171472949),发出指定模块的 etag ,服务器返回状态码304,表示不需要重新下载压缩包。

(2)如果某个模块已经在缓存之中,但是版本低于要求,npm会[直接报错](https://github.com/npm/npm/issues/8581),而不是去 registry 下载最新版本。

查看registry

npm config get registry
//设置淘宝镜像源
npm config set registry https://registry.npm.taobao.org
//将代理为空
npm config set proxy null

[2]:查看全局目录 ,npm install load -g下载的位置就在全局目录的node_modules

npm config get prefix

设置全局目录

npm config set prefix “目录路径”

npm i 就会把package.json这个配置文件里面所有的依赖项,包括-D,-S安装的(这都是我们的依赖项),它都会自动的把所有的依赖项原封不动的安装好

npm i 
或者
npm install

更新&卸载

如果你希望,一个模块不管是否安装过,npm 都要强制重新安装,可以使用-f--force参数。

npm install <package_Name> --force

更新本地包

在该目录下键入

npm update <package_name>

1:npm update命令怎么知道每个模块的最新版本呢?

答案是 npm 模块仓库提供了一个查询服务,叫做 registry 。以 npmjs.org 为例,它的查询服务网址是 https://registry.npmjs.org/

这个网址后面跟上模块名,就会得到一个 JSON 对象,里面是该模块所有版本的信息。比如,访问 https://registry.npmjs.org/react,就会看到 react 模块所有版本的信息。

它跟下面命令的效果是一样的。

$ npm view react

# npm view 的别名
$ npm info react
$ npm show react
$ npm v react

registry 网址的模块名后面,还可以跟上版本号或者标签,用来查询某个具体版本的信息。比如, 访问 https://registry.npmjs.org/react/v0.14.6 ,就可以看到 React 的 0.14.6 版。

返回的 JSON 对象里面,有一个dist.tarball属性,是该版本压缩包的网址。

dist: {
shasum: '2a57c2cf8747b483759ad8de0fa47fb0c5cf5c6a',
tarball: 'http://registry.npmjs.org/react/-/react-0.14.6.tgz' 
},

到这个网址下载压缩包,在本地解压,就得到了模块的源码。npm installnpm update命令,都是通过这种方式安装模块的。

删除本地包

npm uninstall <package_name> 

卸载

npm rm <package.name>

顺便也会删除package.json依赖项 不管是devDependencies还是dependencies

更新全局包

npm update -g <package_name>

卸载全局包

npm uninstall -g <package_name>

package.js注意事项

顺便这里来看一下package.json的内容

{
  "name": "webpack",
  "version": "1.0.0",
  "description": "",
  "private": true,
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {},
  "dependencies": {}
}

他们都是一个配置模块依赖的模块列表,key是模块名称,value是保本范围。

注意这两个:

"devDependencies": {},
"dependencies": {}
  • devDependencies用于本地环境开发时候。
  • dependencies用户发布环境[线上]

[2]:--save-dev <----->( devDependencies ) --save <------->( dependencies )

如果您要开发一个包,例如下载源码(例如通过git clone),转到包含 的根目录package.json,然后运行:

npm install

既然你有实际的源代码,很明显你想要开发它,所以默认情况下,dependencies(因为你当然必须运行才能开发)和devDependency依赖项也被安装了。总结的来说:npm install 将安装所有依赖项。

//npm install npm-clean --save-dev
npm-clean
//这个插件将会清空dependencies

如果您不想安装 devDependencies,您可以使用 npm install --production

但作用都不同devDependencies是属于开发环境在本地开发的时候使用的模块,而dependencies是生产环境依赖,代码发布上线时使用的依赖。

用例:

npm install --save-dev load

打包时可以通过webpack.config.js中的mode:'development'mode:'production来控制是否

是开发环境还是生产环境,前者是开发环境,后者是生产环境,默认是生产环境。

使用npm install <package_nam> --save-dev可将包下载到本地并且也会将依赖项添加到devDependencies依赖项中

npm install <package_nam> --save-dev

使用--save会加载到dependencies依赖中

npm install <package_nam> --save

默认会加载的dependencies

npm install <package_nam>

npm script

npm传参

npm run stater -- --port

传入参数要使用--标明。

npm执行多个任务需要明确它的顺序和关系 如果是并行执行(即同时的平行执行),可以使用&符号。

继发执行(即只有前一个任务成功,才执行下一个任务),可以使用&&符号。

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "sk": "npm run oo & npm run push"
  },

或者使用 npm-run-all插件

npm install --save-dev npm-run-all
//之后
//package.json
"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "oo": "node npm-demo1.js",
    "push": "node npm-demo2.js",
    "jj": "npm-run-all -p push oo"
  },

[npm-run-s]表示顺序,[npm-run-p]表示并行

npm 脚本有prepost两个钩子。举例来说,build脚本命令的钩子就是prebuildpostbuild

{

  "scripts": {

    "prepush": "node npm-demo1.js",
    "push": "node npm-demo2.js",
    "postpush": "node npm-demo3.js"
  },
}
//依次运行脚本

这里省略了两个知识点

(1).获得package.js的属性名或值

(2):脚本的运行

1 2 3