npm进阶(五)NPM 管理 node,2024年最新20道Web前端工程师面试必问题

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
img

正文

{
“name”: “test”,
“version”: “0.1.0”,
“description”: “A testing package”,
“author”: “A messed author messed@example.com”,
“dependencies”: {
“express”: “1.x.x”,
“ejs”: “0.4.2”,
“redis”: “>= 0.6.7”
},
“devDependencies”: {
“vows”: “0.5.x”
},
“main”: “index”,
“bin”: {
“test”: “./bin/test.js”
},
“scripts”: {
“start”: “node server.js”,
“test”: “vows test/*.js”,
“preinstall”: “./configure”,
“install”: “make && make install”
},
“engines”: {
“node”: “0.4.x”
}
}

这个例子定义了应用入口文件( main )为 index ,当其他应用通过 require('test') 引用了我们的模块时,这个 main 的值 index.js 文件被调用。脚本( scripts )使用hash 表定义了几个不同的命令。

script.start 里的定义的 node server.js 会在 npm start 时被调用,同样的 npm test 调用时对应的 scripts.test 里定义的命令被调用。在有些 native 模块需要编译的话,可以定义预编译和编译的命令。本例中还定义了应用依赖模块( dependencies )和开发环境依赖模块( devDependencies )。应用依赖模块会在安装时安装到当前模块的 node_modules 目录下。开发环境依赖模块主要是在开发环境中用到的依赖模块,用命令 npm installnpm link加上参数 —-dev 将安装到当前模块的 node_modules 目录下。

大家也注意到 package.json 里的版本号有些是 >= 0.6.7 有些是 1.x.x,这有什么区别?npm 使用于语义化的版本识别来进行版本管理。并不是所有的模块都会提供向后兼容性,有时候某些模块因为某些原因导致不向后兼容。所以需要定义一些规则来保证模块能够在某些特定的版本中可用,并且保证能用最新的版本,因为那些版本总是修改了一些 bug 或提升了性能等。我们来看一下版本定义的字段:

0.4.2

  • 主版本( 0 )
  • 副版本( 4 )
  • 补丁版本( 2 )

在上面 package.json 的定义里我们确信模块在所有的 Nodejs 0.4及以上和0.5以下版本里都能运行。依赖模块 redis 在所有大于或等于0.6.7的版本上都能运行,依赖模块 ejs 只能确保运行在0.4.2版本里,依赖模块 express 确保能够兼容大于或等于1.0.0并且小于2.0.0。

三、npm 配置

npm 拥有很多默认配置。可以使用这些默认配置,也可以修改这些默认配置,甚至可以在环境变量或命令行下修改这些配置。配置的权重是如下顺序定义的:

  • 命令行,使用--为前缀的参数。比如 --foo bar,设定变量 foo 的值为 bar--foo 后不带值的参数,设定 foo 的值为 true
  • 环境变量,所有 npm_config_ 为前缀的环境变量。比如 npm_config_foo = bar ,设定变量 foo 为 “ bar "。
  • 用户定义。所有的变量存储在 $HOME/.npmrc 文件里的变量。
  • 全局。所有 $PREFIX/etc/npmrc 文件里的变量。$PREFIX 变量可通过 npm prefix -g 获取,一般默认是 /usr/local
  • 内置配置。通过安装时运行 ./configure 所定义的变量。可通过命令curl http://npmjs.org/install.sh | env npm_config_foo=bar sh 设置。

使用配置能给我们带来很大的灵活性。比如使用 npm install 时,对默认的资源库地址 https://registry.npmjs.org/ 不是很满意,可以使用下面的命令来更改资源库地址:

npm --registry “an other registry” install express

或者下面的命令

env npm_config_registry=“an other registry”
npm install express

或是对 npm 默认的 vi 编辑器不满意,直接命令 npm set editor matenpm 的配置可通过命令 npm config ls 获取。这个命令是获取修改后的配置,要获取包括默认配置的全部配置加上 -l 参数。

值得注意的是,开发者通过 npm config set registry "an other registry" 的方式修改 registry 这个属性值,一定要明白这个修改这个值所带来的负面效应。一旦设置了 registry 这个值,当你要 publish 一个模块,会把模块发布到修改后的资源库里,而不是原始默认的资源库。其他的资源库是原始默认的资源库的一个复制品,定时从默认的资源库取资源。一般来说,没有把其新加的模块同步到默认的资源库的能力。这样会导致发生你的模块在修改后的资源库里能够找到,而在其它的资源库里找不到的事情。

四、npm install 命令

npm install是下载node_modules文件夹里的依赖。

安装模块只需要 npm install express connect 命令带来了很大的方便。安装模块的路径分两种:

  • 全局路径,也就是带上参数 -g 的安装模式。这个命令会把模块安装在 $PREFIX/lib/node_modules 下,可通过命令 npm root -g 查看全局模块的安装目录。 package.json 里定义的bin会安装到 $PREFIX/bin 目录下,如果模块带有 man page 会安装到 $PREFIX/share/man 目录下。
  • 本地路径,不带 -g 参数。从当前目录一直查找到根目录/下有没有 node_modules 目录,有的话,模块安装到这个目录下的 node_modules 目录里,如果没有找到则把模块安装到当前目录 node_modules 目录下。package.josn 定义的 bin 会安装到 node_modules/.bin 目录下,man page 则不会安装。

那么,我们需要选择什么样的安装方式呢?全局模式可以让你不用担心找不到模块,但是,如果不需要还是尽量避免全局模式。

如果我们只是 require('pkg') 一个模块,我们不需要使用全局模式。

如果我们需要在命令行中调用,我们需要使用全局模式。因为这个安装把 package.jsonbin 下的定义安装到 $PATH 目录下。

有些模块我们既需要在命令行中调用又想 require('pkg') ,比如 Coffee-script 。那么我们可以使用全局模式安装,然后使用下一节要讲的命令 npm link 把它链接到本地的 node_modules 目录下。

不要担心 package.jsonscript 中定义的命令会不会因为不是全局安装而不能运行。比如在例子里定义的 devDependenciesvows 。在调用 npm testnpm把 node_modules/.bin 目录放到环境变量 $PATH 的最前面。

五、npm link 命令

对开发者而言,这算是最有价值的命令。假设我们开发了一个模块叫 test ,然后我们在 test-example 里引用这个模块 ,每次 test 模块的变动我们都需要反映到 test-example 模块里。不要担心,有了 npm link 命令一切变的非常容易。

首先我们需要把 test 链接到全局模式下:

cd ~/work/node/test # 进入test模块目录
npm link #创建链接到$PREFIX/lib/node\_modules

那么 test 的模块将被链接到 $PREFIX/lib/node_modules 下,就像我的机器上 $PREFIX 指到 /usr/local ,那么 /usr/local/lib/node_modules/test 将会链接到 ~/work/node/test 下。执行脚本 bin/test.js 被链接到 /usr/local/bin/test 上。

接下来我们需要把 test 引用到 test-example 项目中来:

cd ~/work/node/test-example # 进入test-example模块目录
npm link test # 把全局模式的模块链接到本地

npm link test 命令会去 $PREFIX/lib/node_modules 目录下查找名叫 test 的模块,找到这个模块后把 $PREFIX/lib/node_modules/test 的目录链接到 ~/work/node/test-example/node_modules/test 这个目录上来。

现在任何 test 模块上的改动都会直接映射到 test-example 上来。再比如假设我们开发很多应用,每个应用都用到 Coffee-script

学习分享,共勉

题外话,毕竟我工作多年,深知技术改革和创新的方向,Flutter作为跨平台开发技术、Flutter以其美观、快速、高效、开放等优势迅速俘获人心

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

。**

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-pZXRYeXd-1713708456853)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 17
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值