“人生的意义在于修炼灵魂,首先要有纯洁美丽的心灵,这是思考人生要具备的,拥有什么样的心灵,就会选择什么样的人生,实现什么样的人生价值”
--出自《稻盛和夫给年轻人的忠告》
01
—
什么是npm
NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种:
- 允许用户从NPM服务器下载别人编写的第三方包到本地使用。
- 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
- 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。
出自《菜鸟教程》
其实说白了 npm 就是一个基于 node 下的包管理工具,做过 java 开发的同学肯定 maven,作用都差不多。但是今天我们重点介绍的不是 npm 是什么,而且是基于我们平时在开发的过程中都会在命令中行中输入:
代码语言:javascript复制//开发阶段
npm run dev
或者
npm run serve
// 打包阶段
npm run build
到底是怎么样的一个原理。
02
—
基于webpack打包工具下的npm
其实npm和webpack两者没有必然的联系,并不是说我的npm命令只能运行在webpack中。 当我们用 npm init 初始化一个项目之后,我们就可用 npm 命令了,这里也不需要webpack。 但是众所周知我们在开发Vue项止的时候,都少不了和 webpack 和 vite 这样的工具打交道。下面我就介绍一下基于webpack打包工具下的npm是怎么样的运行过程。
首先我们创建一个vue项目项目:
代码语言:javascript复制vue create test-vue
我的vue-cli版本是4.4.6,所以要通过这行命令创建。其它版本的可以查一下官方文档。这里不过多解释。
当创建好之后出现以下提示,说明项目已经创建好了
用vscode打开项目,看一下文件目录:
这里面有一个比较重要的文件就是 package.json。
下篇文章我们重点介绍一下 package.json 倒底是怎么个东西。
03
—
原理分析
我们在命令行中输入命令:
代码语言:javascript复制npm run serve
看一下运行成功之后的提示信息:
有没有小伙伴想过这样的问题:为什么是运行npm run serve命令呢,这些命令在哪里呢,我该怎么记住这些命令。
其实这个命令不需要记这个命令,我们只要记住 npm run就好,当我们创建完项目之后可以看到一个package.json文件。看一下主要的内容:文件内容过多,我们主要看一下 script标签的内容
代码语言:javascript复制{
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
}
}
聪明的小朋友可能已经明白了,会不会我们 npm run serve 就是执行的的第一行吧。其实是对的,当我们输入 npm run 之后,就是相当于运行 vue-cli-service serve 这行指令。这个名称可以改,我们改成 dev 之后,就是 npm run dev。不知小伙伴是否明白了。
是谁帮我们做的这些事
那么又是谁帮我们把项目运行起来的呢?
- 输入 npm run serve回车,
- npm会在项目的目录下找到 node_modules文件夹下的 .bin目录
- 把此目录添到系统的path环境变量下,执行完之后再把环境变量下的目录删除。
- 打开这个文件夹可以看到一个文件:vue-cli-service 这其实是一个 link 快捷方式,它指向 @ vue/cli-service/bin/vue-cli-service.js这个文件。
npm run serve 就是在运行这个vue-cli-service.js脚本文件。看一下里面的一些代码:
代码语言:javascript复制const Service = require('../lib/Service')
const service = new Service(process.env.VUE_CLI_CONTEXT || process.cwd())
// ....省略了一些代码
const command = args._[0]
service.run(command, args, rawArgv).catch(err => {
error(err)
process.exit(1)
})
这个文件中的源码是非常多的,我们只是取了比较重要和直观的源码进行分析了一下,让大家明白,这里其实就是开启了一个node服务。
最重要的是上面的那几个步骤,大家要做到心中有数,要尽量:知其然,知其所以然。这样才能对自己的内功有更好的帮助和提升。