和模块为同一个概念,由第三方个人或团队开发
npm install package[@v]
npm i package[@v]
根目录下会生成node_modules和package-lock.json以存放下载的包并记录下它们的信息
在项目根目录中,必须提供package.json的包管理配置文件,记录与项目有关的配置信息,如项目名称、版本号、描述:
npm init -y
由此在共享项目时,方便移除node_modules目录,也就是将node_modules添加到.gitignore忽略文件中
在package.json存在时,可以通过命令行快速将依赖包添加到项目中
npm install
npm i
如果某些包只在开发阶段使用,可以将其添加到devDependencies节点中:
npm i package -D
npm i package --save-dev
通过npm uninstall package可以删除指定的包
- 查看
npm config get registry - 修改
npm config set registry=https://registry.npm.taobao.org/
初始镜像源为https://registry.npmjs.org/
淘宝镜像源为https://registry.npm.taobao.org/
利用nrm可以快速切换镜像源
npm i -g nrm
nrm ls
nrm use taobao
利用i5ting_toc可以将.md文件转化为页面
npm i -g i5ting_toc
# -o 表示转化完毕后打开对应的html文件
i5ting_toc -f ./file.md -o
- 以单独的目录存在
- 顶级目录下包含
package.json包管理配置文件 package.json中必须包含name、version、main属性,表示包名、版本号、包的入口
{
"name": "package_name",
"version": "i.j.k",
"main": "./package.js"
}package.json的其他属性
{
"description": "包的简要描述",
"keywords": ["检索包的关键词1", "关键词2", "..."],
"license": "ISC"
}uername: weige666*2
email: lekaimie@gmail.com
password: rekaime
通过npm login进行登录操作,输入用户名、密码、邮箱完成登录
在登录前需要先把下包服务器地址切换为npm的官方服务器
cd 包的顶级目录
npm publish
包名不能雷同
npm unpublish package --force
npm unpublish只能删除72小时内发布的包npm unpublish删除的包不能于24小时内重新发布- 不要发布没有意义的包
nanoid:类似于uuid,可以生成id标识
npm i nanoidimport { nanoid } from 'nanoid'Student.js
const name = 'rekaime'
const id = '001'
function getName() {
return name
}
function getHobbies() {
return ['Learning', 'Playing games', 'Singing']
}
// 单个追加 exports === this
exports.name = name
this.name = name
// 批量导出
module.exports = {
getName,
getHobbies
}index.js
const student = require('./student.js')
// OR
const { getName, getHobbies } = require('./student.js')NodeJS的代码其实被包装在一个函数中,我们所编写的代码其实是这个函数的函数体
调用console.log(arguments.callee.toString())可以查看函数
function (exports, require, module, __filename, __dirname) {
/* ... */
}NodeJS默认支持CommonJS而浏览器不支持,需要代码编译后才可以在浏览器导入
借助第三方包
npm i browserify -g
browserify target.js -o build.js通过type="module"可以让浏览器解析js资源时,将其中的变量进行隔离
也就是该js文件中诞生的变量不再挂载到windows上
<script type="module" src="./index.js"></script>
- 将
.js后缀名更改为.mjs - 在
package.json文件中设置"type": "module"
以下三种导出方式可以混用,不会造成冲突
student.js
const name = 'rekaime'
const id = '001'
// 通过 export 标识希望导出的变量名
export function getName() {
return name
}
export function getHobbies() {
return ['Learning', 'Playing games', 'Singing']
}student.js
const name = 'rekaime'
const id = '001'
function getName() {
return name
}
function getHobbies() {
return ['Learning', 'Playing games', 'Singing']
}
// 通过 export 指定一系列需要导出的变量名
// 这里的 {} 只是作为标识符 不是对象
export { getName, getHobbies }student.js
const name = 'rekaime'
const id = '001'
function getName() {
return name
}
function getHobbies() {
return ['Learning', 'Playing games', 'Singing']
}
// 通过 export default 指示需要导出的变量名
// 一般导出的内容会被封装在对象中
export default { getName, getHobbies }index.js
// 导入的内容在 student 上可见
// 非默认导出的内容直接挂载在 student 上
// 默认导出的变量 === student.default
import * as school from './student.js'index.js
import { getName as getStudentName, getHobbies } from './student.js'index.js
// 导入的是默认导出的内容 所以导入的包必须要有默认导出
import student from './student.js'index.js
// 一般导入一个即时生效的文件 或者用于异步导入
// 导入一百遍也只生效一次 所以不要导多了
import('./student.js')