Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用NPM

使用NPM

作者头像
代码之风
发布于 2018-10-31 03:35:44
发布于 2018-10-31 03:35:44
1.2K00
代码可运行
举报
文章被收录于专栏:马涛涛的专栏马涛涛的专栏
运行总次数:0
代码可运行

Nodejs生态圈很强大,第一个原因就是NPM,因为全球有无数的程序员在NPM中贡献了自己的力量。

为了避免造轮子,我们有时候会用到其他人的劳动成果,比如一些优秀的框架,比如Express,我们直接使用NPM下载下来就可以用了,降低开发成本和时间。

安装

安装好nodejs后就安装好了npm,这时系统自带npm命令

如何使用

以为Express来举例。 npm 的官网可以找到 npm 包。 https://www.npmjs.com/ 例如搜索Express,就会告诉你安装方法和使用方法:

安装Express

新建一个文件夹,然后运行: npm init初始化,一直按回车,它会自动生成package.json 文件,这个后面再说这个文件的作用。 然后 npm install express安装

会出现node_modules文件夹

node_modules文件夹就是所有包安装的位置。 express已经安装到了node_modules文件夹,其他的很多文件都是这个express依赖的包

package.json 文件

我们写一个项目的时候可能会用到很多很多包,这些包可能是一些工具,也可能是框架。我们每使用一个包,就会把这些包下载下来,然后他会放到node_modules目录中。 那么项目如果太大,哪些包安装了哪些没安装,我们如何知道呢?有没有一个机制来记住我们安装的包呢? 有,nodejs提供了一个机制叫package.json。 他是一个文件,他可以记住所有安装的包的信息,包括名称、版本信息。 如果我们迁移项目,我们就能够知道安装了什么包。因为node_modules目录中文件比较大,而且不放在版本控制中(github等),也不是源码的一部分,我们只要知道node_modules里安装的一些包的名字就可以了,根本不需要这个目录的内容。

比如说现在一个同事得到了这一份代码,那么这个node_modules目录中的代码他是不需要的。因为他只需要安装过得这些包的名称就可以了,到他自己的电脑上再安装就可以了。

package.json就是记录所有安装的包的信息的文件。

生成方法

运行npm init初始化一个项目。 他会让你回答一些关于这个项目的信息,一直按回车,因为这些信息后面可以改,最开始使用默认的就好。

然后就会生成一个package.json的文件。

举例:尝试安装Express并查看package.json

npm install --save express

安装之后出现很多包,这些都是express依赖的包。

"dependencies"

安装后出dependencies字段会出现安装的包的详细信息,包括包的名称和版本号。 "dependencies"中文是依赖的意思。

"devDependencies"

devDependencies是开发环境依赖的意思。例如我们用下面的命令行安装gulp npm install --save-dev gulp

开发环境的包会记录在这里 使用--save-dev就是开发环境依赖的一些包,会记录到devDependencies

"scripts"中的"start"

在"scripts"里加入一行"start": "node app.js",

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node app.js"
  },

那么如果我们运行npm run start

就会运行"start"里面的命令。

作用:别人下载你的代码之后可能不知道怎么运行你的项目,那么你把这些命令写在start里,那么项目入口文件之类的就一目了然。

使用package.json 命令:npm install

package.json记录了安装包的所有安装信息,那么别人得到这些信息如何把这些包安装下来呢(安装到他的本地) 使用命令npm install就可以了,比如我们现在删掉node_modules,然后再运行npm install 他就会重新安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"dependencies": {
    "express": "^4.16.4"
  },
  "devDependencies": {
    "gulp": "^3.9.1"
  }

这两个依赖中的包

全局安装与局部安装的区别

全局安装

比如我们安装webpack npm install -g webpack -g 意思是Global,全局的意思,他会把webpack作为一个命令,一个可执行文件,安装到我们的系统中,以后我们就可以使用这个命令了

局部安装

局部安装只安装到这个项目当前的文件夹中,如果想使用webpack命令,就要运行使用当前项目下的文件,才能运行webpack node_modules/.bin/webpack

Babel举例说明

用Babel举例说明全局安装与局部安装的区别:

命令行转码babel-cli————阮一峰的es6教程

上面代码是在全局环境下,进行 Babel 转码。这意味着,如果项目要运行,全局环境必须有Babel,也就是说项目产生了对环境的依赖。另一方面,这样做也无法支持不同项目使用不同版本的 Babel。一个解决办法是将babel-cli安装在项目之中。

总结:全局安装的话你的项目不容易更新,因为不同项目使用的babel的版本可能不同,而且你和你团队使用的babel的版本也可能不同。所以要把babel直接安装在项目中。这样其他人拿到项目再安装项目内的babel,就不会出现版本不兼容问题了。

http-server举例说明

再比如我们安装http-server npm install -g http-server

安装在了这个目录下新增的一个文件,叫做http-server

npm install -g的时候安装在全局目录下,npm install不带-g的时候安装在当前目录下,如图

如果是全局安装,那么直接就可以用了,因为Mac中 /usr/local/bin 是包含在path里面的。

如果我直接在命令行里输入http-server,那么会访问到/usr/local/bin这个路径里的http-server文件

如果只安装在了局部的项目里,想用的话就去当前目录下去找http-server这个文件,一样可以用:

命令行的实质就是一个文件而已!全局命令就是装在环境里的文件!局部命令就是放在一个目录里,用的时候需要执行局部文件

切换淘宝源

注意:在国内安装这些包的时候有时候会很慢,因为这些包的服务器在国外。我们可以换一个源,即把服务器换到国内,例如淘宝的源

运行下面的命令即可切换淘宝源

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm config set registry https://registry.npm.taobao.org/
npm config set loglevel http
npm config set progress false

npm 的配置被存储在 ~/.npmrc,你可以随时改。

这是官方网站 https://npm.taobao.org/

安装node-sass的正确姿势

安装node-sass的正确姿势

从 npm 到全面拥抱 yarn

从 npm 到全面拥抱 yarn

个人觉得 yarn 有以下好处:

  1. 超快的下载速度。
  2. 离线下载,如果你懂 ruby,这个有点像 bundle,就是之前下载过一次,这个包就会放到电脑上的一个地方,下次别的项目要使用同一个包的时候就不用下载了,而是做一个链接,这样速度超级快,这一点很重要,npm 饱受诟病的一点就是,每次安装依赖,都需要从网络下载一大堆东西,而且是全部重新下载。工程多的时候比较烦人。这下子可以节约大量时间了。
  3. 拥有 lockfile 文件,在 yarn 中叫 yarn.lock,这个在新版的 npm 也有这个功能,它的文件名叫 package-lock.json,这个文件会记录每次安装的包的版本的精确信息,这样,每次运行 yarn install 就会得到一模一样的依赖环境,而不是会出现个别包的版本不同,从而引发环境问题导致项目运行情况不同的尴尬事件。

安装方法、使用方法、切换源等见链接

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
斐波那契数列
我们都知道斐波那契数(也叫兔子数)是一组十分有趣的数字,首相为1,第二项也是1,之后的每一项就是前两项之和,那么该如何实现输入第n项就打印其对应的斐波那契数字呢?
用户9996207
2023/01/13
5390
斐波那契数列题型汇总
(注:暂时先记录这些问题,后期会持续更新) 斐波那契数列介绍 特点:头两项均为1,后面任一项都是其前两项之和。 程序在计算中需要用两个变量存储最近产生的两个序列值,且产生了新数据后,两个变量要更新。 问题1:输出斐波那契数列的前十项。 int i,x1,x2,x; x1=1; //头两项都是1 x2=1; printf("%6d%6d",x1,x2); for(i=1;i<=8;i++){ //循环输出后8项 x=x1+x2; //计算新项
Zoctopus
2018/06/04
8030
SDUT 2019 级程序设计基础(B)II 实验3–递推
下面兔子都以对为单位,可以看出第n天出生的是由第n-1天成年的和第n-1天新生的兔子(长大一天第n天可以生了)一起生的,而第n-1天出生的又由有第n-2天出生和成年的一起生的……如此递推,很容易得出第i天出生的兔子数:1 1 2 3 5……,同理总兔子数也可以求得为 1 2 3 5 8…即斐波那契数列。
Here_SDUT
2022/06/29
2070
SDUT 2019 级程序设计基础(B)II 实验3–递推
斐波那契数列(用c语言探索黄金分割之美)
摘要:本文将介绍斐波那契数列的概念、性质及应用,并通过C语言代码实例演示如何实现斐波那契数列。 一、斐波那契数列的定义与性质 斐波那契数列(Fibonacci sequence)又称黄金分割数列,由数学家列昂纳多·斐波那契(Leonardo da Fibonacci)在《计算之书》中以兔子繁殖为例子引入。斐波那契数列的定义如下: F(0) = 0 F(1) = 1 F(n) = F(n-1) + F(n-2) (n > 2,n ∈ N) 斐波那契数列的前几项为:0,1,1,2,3,5,8,13,21,34,55,89,144…… 二、斐波那契数列的性质 1. 递推性:斐波那契数列满足递推关系式,即每个数字都是前两个数字之和。 2. 黄金分割比例:随着斐波那契数值的增加,前一项与后一项的比值越来越接近黄金分割比例0.6180339887(约等于1 / 1.6180339887)。 3. 斐波那契数列与黄金分割在自然界、艺术、建筑等领域有广泛的应用。 三、代码示例 下面使用C语言实现斐波那契数列:
GG Bond1
2024/06/14
1500
斐波那契数列 -- C/C++ 实现
斐波那契数列有一个规律,斐波那契数列的前一项加上它的后一项等于下一项。因此,使用递推的算法可以很容易实现,即F(n)=F(n - 1)+F(n - 2)。
Skykguj
2022/09/09
6110
那些年我们一起忘掉的C (三).斐波那契数列
斐波那契数列是这样一种数列,它的头两个元素是1,从第三个开始,后面的每一个元素值都是它之前两个元素之和,如:
franket
2021/10/18
3860
fibonacci数列递归,动态规划,循环+递推三种方法的性能比较
斐波那契数列的定义 1.n==1 || n==2 A(n) = 1 2.An = A(n-1)+A(n-2)
lexingsen
2022/02/24
7440
fibonacci数列递归,动态规划,循环+递推三种方法的性能比较
汉诺塔问题(利用递归解决)内含斐波那契数列0.o
首先,我们来看看什么是汉诺塔吧~记得初知汉诺塔,就是在今年的暑假游览科技馆的时候,里面就有汉诺塔的游戏,当然耐心烦躁的我并没有解决,没想到今日学习c语言还能看见它(捂脸)。
用户11039545
2024/03/28
2030
汉诺塔问题(利用递归解决)内含斐波那契数列0.o
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-基础练习 Fibonacci数列
        最近的一些文章都可能会很碎,写到哪里是哪里,过一阵子会具体的整理一遍,这里其它的类型题先往后排一排,因为蓝桥最后考的也就是对题目逻辑的理解能力,也就是dp分析能力了,所以就主要目标定在这里,最近的题目会很散,很多,基本上都是网罗全网的一些dp练习题进行二次训练,准备比赛的学生底子薄的先不建议看啊,当然,脑子快的例外,可以直接跳过之前的一切直接来看即可,只需要你在高中的时候数学成绩还可以那就没啥问题,其实,dp就是规律总结,我们只需要推导出对应题目的数学规律就可以直接操作,可能是一维数组,也可能是二维数组,总体来看二维数组的较多,但是如果能降为的话建议降为,因为如果降为起来你看看时间复杂度就知道咋回事了,那么在这里祝大家能无序的各种看明白,争取能帮助到大家。
红目香薰
2023/02/17
2920
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-基础练习 Fibonacci数列
用递归法计算斐波那契数列的第n项
斐波纳契数列(FibonacciSequence)又称黄金分割数列,指的是这样一个数列:1、1、2C/C++
Java架构师必看
2021/03/22
9640
斐波那契数列 Java
这个因为要反复调用自己,所以时间很长,来到50的时候就要等好几秒才出结果,java还好了,同样的代码,python算38的时候就要等好久。
叶茂林
2023/07/30
1400
c语言牛客网64-114题基础练习
如烟花般绚烂却又稍纵即逝
2024/11/26
1700
c语言牛客网64-114题基础练习
求第n个斐波那契数列
1.递归方法实现 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int Fib(int n){ if(n==1){ return 1;} if(n==2){ return 1;} return Fib(n-1)+Fib(n-2); } int main(){ int n; int a; printf("请输入需要打印的斐波那契数\n"); scanf("%d",&n); a=Fib(n); sy
小雨的分享社区
2022/10/26
2620
求斐波那契数列的问题
前言 假如面试官让你编写求斐波那契数列的代码时,是不是心中暗喜?不就是递归么,早就会了。如果真这么想,那就危险了。 递归解法 递归,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。 斐波那
编程珠玑
2019/09/02
6300
面试题精选:神奇的斐波那契数列
斐波那契数列,其最开始的几项是0、1、1、2、3、5、8、13、21、34…… ,后面的每一项是前两项之和,事实上,斐波那契在数学上有自己的严格递归定义。
xindoo
2021/01/22
8110
面试题精选:神奇的斐波那契数列
【C语言系列】函数递归
递归其实是一种解决问题的方法,在C语言中,递归就是函数自己调用自己。 下面我们看最简单的递归代码:
四念处茫茫
2025/02/06
1540
【C语言系列】函数递归
(斐波那契数列)使用函数输出指定范围内Fibonacc的数(PTA)
本题要求实现一个计算Fibonacci数的简单函数,并利用其实现另一个函数,输出两正整数m和n(0<m≤n≤10000)之间的所有Fibonacci数。所谓Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列。
兰舟千帆
2022/07/16
1K0
(斐波那契数列)使用函数输出指定范围内Fibonacc的数(PTA)
M斐波那契数列
F[0] = a F1 = b F[n] = F[n-1] * F[n-2] ( n > 1 )
xiaohejun
2020/02/18
5800
100例C语言经典编程题 | 浙大版C语言题目集第三版,助力你C语言从入门到精通
本题要求编写程序,输出一个短句“Programming in C is fun!”。
C you again 的博客
2021/09/14
4.9K1
100例C语言经典编程题 | 浙大版C语言题目集第三版,助力你C语言从入门到精通
小朋友学C语言(17):斐波那契数列的递归实现
什么是递归呢?先举个例子: 从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?"从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?'从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?……'" 这个例子里,故事内嵌套着故事,构成了递归。 动手编写程序: #include <stdio.h> int fibonacci(int n) { if(1 == n || 2 == n) { return
海天一树
2018/04/17
9460
小朋友学C语言(17):斐波那契数列的递归实现
推荐阅读
相关推荐
斐波那契数列
更多 >
LV.0
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档