1.Node中函数的特点
Node中任何一个模块(js文件)都被一个外层函数所包裹
function (exports, require, module, __filename, __dirname){
}
exports:用于暴露模块
require:用于引入模块
module:用于暴露模块
__filename:当前文件所在的路径(绝对)
__dirname:当前文件所在文件夹的路径(绝对)
为什么要有这个外层函数(这个外层函数有什么作用)
1.隐藏内部实现
2.支持commonjs的模块化
2.Node中的global
1.对于浏览器端而言,js由哪几部分组成?
1.BOM 浏览器对象模型 -------- 很多的API(location,history)
2.DOM 文档对象模型 ---------- 很多的API(对DOM的增删改查)
3.ES规范 -------------------- ES5、ES6.....
2.Node端js由几部分组成?
1.没有了BOM ----- 因为服务器不需要(服务端没有浏览器对象)
2.没有了DOM ----- 因为没有浏览器窗口
3.几乎包含了所有的ES规范
4.没有了window,但是取而代之的是一个叫做global的全局变量。
console.log(global)
// 以下就是控制台输出的结果,global是一个全局对象,里面包含了很多方法属性,我们主要学习一小部分重要和常用的方法,满足工作中的需求
/*
Object [global] {
DTRACE_NET_SERVER_CONNECTION: [Function],
DTRACE_NET_STREAM_END: [Function],
DTRACE_HTTP_SERVER_REQUEST: [Function],
DTRACE_HTTP_SERVER_RESPONSE: [Function],
DTRACE_HTTP_CLIENT_REQUEST: [Function],
DTRACE_HTTP_CLIENT_RESPONSE: [Function],
COUNTER_NET_SERVER_CONNECTION: [Function],
COUNTER_NET_SERVER_CONNECTION_CLOSE: [Function],
COUNTER_HTTP_SERVER_REQUEST: [Function],
COUNTER_HTTP_SERVER_RESPONSE: [Function],
COUNTER_HTTP_CLIENT_REQUEST: [Function],
COUNTER_HTTP_CLIENT_RESPONSE: [Function],
global: [Circular],
process:
process {
title:
'管理员: C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\powershell.exe',
version: 'v10.16.3',
versions:
{ http_parser: '2.8.0',
node: '10.16.3',
v8: '6.8.275.32-node.54',
uv: '1.28.0',
zlib: '1.2.11',
brotli: '1.0.7',
ares: '1.15.0',
modules: '64',
nghttp2: '1.39.2',
napi: '4',
openssl: '1.1.1c',
icu: '64.2',
unicode: '12.1',
cldr: '35.1',
tz: '2019a' },
arch: 'x64',
platform: 'win32',
release:
{ name: 'node',
lts: 'Dubnium',
sourceUrl:
'https://nodejs.org/download/release/v10.16.3/node-v10.16.3.tar.gz',
headersUrl:
'https://nodejs.org/download/release/v10.16.3/node-v10.16.3-headers.tar.gz',
libUrl:
'https://nodejs.org/download/release/v10.16.3/win-x64/node.lib' },
argv:
[ 'C:\\Program Files\\nodejs\\node.exe',
'C:\\Users\\asus\\Desktop\\node\\复习\\test.js' ],
execArgv: [],
env:
{ ALLUSERSPROFILE: 'C:\\ProgramData',
APPDATA: 'C:\\Users\\asus\\AppData\\Roaming',
'asl.log': 'Destination=file',
AWE_DIR:
'C:\\Program Files (x86)\\Khrona LLC\\Awesomium SDK\\1.6.6\\',
CommonProgramFiles: 'C:\\Program Files\\Common Files',
'CommonProgramFiles(x86)': 'C:\\Program Files (x86)\\Common Files',
CommonProgramW6432: 'C:\\Program Files\\Common Files',
COMPUTERNAME: 'DESKTOP-CRC0I9T',
ComSpec: 'C:\\WINDOWS\\system32\\cmd.exe',
DriverData: 'C:\\Windows\\System32\\Drivers\\DriverData',
FPS_BROWSER_APP_PROFILE_STRING: 'Internet Explorer',
FPS_BROWSER_USER_PROFILE_STRING: 'Default',
HOMEDRIVE: 'C:',
HOMEPATH: '\\Users\\asus',
LOCALAPPDATA: 'C:\\Users\\asus\\AppData\\Local',
LOGONSERVER: '\\\\DESKTOP-CRC0I9T',
NUMBER_OF_PROCESSORS: '8',
OneDrive: 'C:\\Users\\asus\\OneDrive',
OS: 'Windows_NT',
Path:
'C:\\Program Files (x86)\\Intel\\iCLS Client\\;C:\\Program Files\\Intel\\iCLS Client\\;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\Program Files (x86)\\NVIDIA Corporation\\PhysX\\Common;C:\\Program Files (x86)\\Intel\\Intel(R) Management Engine Components\\DAL;C:\\Program Files\\Intel\\Intel(R) Management Engine Components\\DAL;C:\\Program Files (x86)\\Intel\\Intel(R) Management Engine Components\\IPT;C:\\Program Files\\Intel\\Intel(R) Management Engine Components\\IPT;C:\\WINDOWS\\system32;C:\\WINDOWS;C:\\WINDOWS\\System32\\Wbem;C:\\WINDOWS\\System32\\WindowsPowerShell\\v1.0\\;C:\\WINDOWS\\System32\\OpenSSH\\;C:\\Program Files\\nodejs\\;D:\\前端各类软件\\cmder_mini;C:\\Program Files\\Git\\cmd;C:\\Users\\asus\\AppData\\Local\\Programs\\Microsoft VS Code;C:\\Program Files\\MongoDB\\Server\\4.3\\bin;D:\\Program Files (x86)\\KuGou\\KGMusic;C:\\Python27;C:\\Users\\asus\\.windows-build-tools\\python27\\;C:\\Users\\asus\\AppData\\Local\\Microsoft\\WindowsApps;C:\\Users\\asus\\AppData\\Local\\Programs\\Microsoft VS Code\\bin;C:\\Users\\asus\\AppData\\Roaming\\npm;C:\\Program Files (x86)\\Thunder Network\\Thunder\\Program;C:\\Program Files\\MongoDB\\Server\\4.3\\bin;',
PATHEXT: '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL',
PROCESSOR_ARCHITECTURE: 'AMD64',
PROCESSOR_IDENTIFIER: 'Intel64 Family 6 Model 158 Stepping 9, GenuineIntel',
PROCESSOR_LEVEL: '6',
PROCESSOR_REVISION: '9e09',
ProgramData: 'C:\\ProgramData',
ProgramFiles: 'C:\\Program Files',
'ProgramFiles(x86)': 'C:\\Program Files (x86)',
ProgramW6432: 'C:\\Program Files',
PSModulePath:
'C:\\Users\\asus\\Documents\\WindowsPowerShell\\Modules;C:\\Program Files\\WindowsPowerShell\\Modules;C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\Modules',
PUBLIC: 'C:\\Users\\Public',
SESSIONNAME: 'Console',
SystemDrive: 'C:',
SystemRoot: 'C:\\WINDOWS',
TEMP: 'C:\\Users\\asus\\AppData\\Local\\Temp',
TMP: 'C:\\Users\\asus\\AppData\\Local\\Temp',
USERDOMAIN: 'DESKTOP-CRC0I9T',
USERDOMAIN_ROAMINGPROFILE: 'DESKTOP-CRC0I9T',
USERNAME: 'asus',
USERPROFILE: 'C:\\Users\\asus',
vscode:
'C:\\Users\\asus\\AppData\\Local\\Programs\\Microsoft VS Code',
windir: 'C:\\WINDOWS',
TERM_PROGRAM: 'vscode',
TERM_PROGRAM_VERSION: '1.45.1',
LANG: 'zh_CN.UTF-8',
COLORTERM: 'truecolor',
VSCODE_GIT_IPC_HANDLE: '\\\\.\\pipe\\vscode-git-acf7697751-sock',
GIT_ASKPASS:
'c:\\Users\\asus\\AppData\\Local\\Programs\\Microsoft VS Code\\resources\\app\\extensions\\git\\dist\\askpass.sh',
VSCODE_GIT_ASKPASS_NODE:
'C:\\Users\\asus\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe',
VSCODE_GIT_ASKPASS_MAIN:
'c:\\Users\\asus\\AppData\\Local\\Programs\\Microsoft VS Code\\resources\\app\\extensions\\git\\dist\\askpass-main.js' },
pid: 18656,
features:
{ debug: false,
uv: true,
ipv6: true,
tls_alpn: true,
tls_sni: true,
tls_ocsp: true,
tls: true },
ppid: 9536,
execPath: 'C:\\Program Files\\nodejs\\node.exe',
debugPort: 9229,
_debugProcess: [Function: _debugProcess],
_debugEnd: [Function: _debugEnd],
_startProfilerIdleNotifier: [Function: _startProfilerIdleNotifier],
_stopProfilerIdleNotifier: [Function: _stopProfilerIdleNotifier],
abort: [Function: abort],
chdir: [Function: chdir],
umask: [Function: umask],
_getActiveRequests: [Function: _getActiveRequests],
_getActiveHandles: [Function: _getActiveHandles],
_kill: [Function: _kill],
cwd: [Function: cwd],
dlopen: [Function: dlopen],
reallyExit: [Function: reallyExit],
uptime: [Function: uptime],
_rawDebug: [Function],
moduleLoadList:
[ 'Internal Binding module_wrap',
'Binding contextify',
'Internal Binding worker',
'NativeModule events',
'NativeModule internal/async_hooks',
'NativeModule internal/errors',
'Binding uv',
'Binding buffer',
'Binding async_wrap',
'Internal Binding async_wrap',
'Binding config',
'Binding icu',
'NativeModule util',
'NativeModule internal/util/inspect',
'Binding util',
'NativeModule internal/util',
'Binding constants',
'Internal Binding types',
'NativeModule internal/util/types',
'NativeModule internal/validators',
'NativeModule internal/encoding',
'Internal Binding icu',
'NativeModule buffer',
'NativeModule internal/buffer',
'NativeModule internal/process/per_thread',
'NativeModule internal/process/main_thread_only',
'NativeModule internal/process/stdio',
'NativeModule assert',
'NativeModule internal/assert',
'NativeModule fs',
'NativeModule path',
'NativeModule internal/constants',
'Binding fs',
'NativeModule internal/fs/streams',
'NativeModule internal/fs/utils',
'NativeModule stream',
'NativeModule internal/streams/pipeline',
'NativeModule internal/streams/end-of-stream',
'NativeModule internal/streams/legacy',
'NativeModule _stream_readable',
'NativeModule internal/streams/buffer_list',
'NativeModule internal/streams/destroy',
'NativeModule internal/streams/state',
'NativeModule _stream_writable',
'NativeModule _stream_duplex',
'NativeModule _stream_transform',
'NativeModule _stream_passthrough',
'NativeModule internal/url',
'NativeModule internal/querystring',
'Binding url',
'NativeModule internal/process/warning',
'NativeModule internal/process/next_tick',
'NativeModule internal/process/promises',
'Internal Binding util',
'NativeModule internal/fixed_queue',
'Binding performance',
'Binding trace_events',
'NativeModule internal/inspector_async_hook',
'Binding inspector',
'NativeModule internal/options',
'Internal Binding options',
'NativeModule timers',
'Binding timer_wrap',
'NativeModule internal/linkedlist',
'NativeModule internal/timers',
'NativeModule console',
'Binding tty_wrap',
'Internal Binding tty_wrap',
'NativeModule tty',
'NativeModule net',
'NativeModule internal/net',
'Binding stream_wrap',
'Binding tcp_wrap',
'Binding pipe_wrap',
'NativeModule internal/stream_base_commons',
'Internal Binding stream_wrap',
'Internal Binding uv',
'NativeModule internal/tty',
'Binding signal_wrap',
'NativeModule internal/modules/cjs/loader',
'NativeModule vm',
'NativeModule internal/modules/cjs/helpers',
'NativeModule url',
'NativeModule internal/safe_globals',
'Internal Binding contextify',
'NativeModule os',
'Binding os' ],
binding: [Function: binding],
_linkedBinding: [Function: _linkedBinding],
_events:
[Object: null prototype] {
newListener: [Function],
removeListener: [Function],
warning: [Function],
SIGWINCH: [Array] },
_eventsCount: 4,
_maxListeners: undefined,
_fatalException: [Function],
domain: null,
_exiting: false,
assert: [Function: deprecated],
config: { target_defaults: [Object], variables: [Object] },
setUncaughtExceptionCaptureCallback: [Function],
hasUncaughtExceptionCaptureCallback: [Function],
emitWarning: [Function],
nextTick: [Function: nextTick],
_tickCallback: [Function: _tickCallback],
stdout: [Getter],
stderr: [Getter],
stdin: [Getter],
openStdin: [Function],
hrtime: { [Function: hrtime] bigint: [Function] },
cpuUsage: [Function: cpuUsage],
memoryUsage: [Function: memoryUsage],
exit: [Function],
kill: [Function],
argv0: 'C:\\Program Files\\nodejs\\node.exe',
allowedNodeEnvironmentFlags: [Getter/Setter],
mainModule:
Module {
id: '.',
id: '.',
exports: {},
parent: null,
filename: 'C:\\Users\\asus\\Desktop\\node\\复习\\test.js',
loaded: false,
children: [],
paths: [Array] } },
Buffer:
{ [Function: Buffer]
poolSize: 8192,
from: [Function: from],
of: [Function: of],
alloc: [Function: alloc],
allocUnsafe: [Function: allocUnsafe],
allocUnsafeSlow: [Function: allocUnsafeSlow],
isBuffer: [Function: isBuffer],
compare: [Function: compare],
isEncoding: [Function: isEncoding],
concat: [Function: concat],
byteLength: [Function: byteLength],
[Symbol(kIsEncodingSymbol)]: [Function: isEncoding] },
clearImmediate: [Function: clearImmediate],
clearInterval: [Function: clearInterval],
clearTimeout: [Function: clearTimeout],
setImmediate:
{ [Function: setImmediate] [Symbol(util.promisify.custom)]: [Function] },
setInterval: [Function: setInterval],
setTimeout:
{ [Function: setTimeout] [Symbol(util.promisify.custom)]: [Function] } }
*/
3.包与npm包管理器
1.什么是包?
我们电脑上的文件夹,包含了某些特定的文件,符合了某些特定的结构,就是一个包。
2.一个标准的包,应该包含哪些内容?
1) package.json ------- 描述文件(包的 “说明书”,必须要有!!!)
2) bin -----------------可执行二进制文件
3) lib ---------------- 经过编译后的js代码
4) doc ---------------- 文档(说明文档、bug修复文档、版本变更记录文档)
5) test --------------- 一些测试报告
3.如何让一个普通文件夹变成一个包?
让这个文件夹拥有一个:package.json文件即可,且package.json里面的内容要合法。
执行命令:npm init
包名的要求:不能有中文、不能有大写字母、不能与npm仓库上其他包同名。
4.npm与node的关系?(npm:node package manager)
安装node后自动安装npm(npm是node官方出的包管理器,专门用于管理包)
5.npm的常用命令?
一、【搜索】:
1.npm search xxxxx
2.通过网址搜索:www.npmjs.com
二、【安装】:(安装之前必须保证文件夹内有package.json,且里面的内容格式合法)
1.npm install xxxxx --save 或 npm i xxxx -S 或 npm i xxxx
备注:
(1).局部安装完的第三方包,放在当前目录中node_modules这个文件夹里
(2).安装完毕会自动产生一个package-lock.json(npm版本在5以后才有),里面缓存的是每个下载过的包的地址,目的是下次安装时速度快一些。
(3).当安装完一个包,该包的名字会自动写入到package.json中的【dependencies(生产依赖)】里。
2.npm install xxxxx --save-dev 或 npm i xxxxx -D 安装包并将该包写入到【devDependencies(开发依赖中)】
备注:什么是生产依赖与开发依赖?
1.只在开发时(写代码时)时需要依赖的库,就是开发依赖 ----- 例如:语法检查、压缩代码、扩展css前缀的包。
2.在生产环境中必不可少的包,就是生产依赖 ------ 例如:jquery、axios等等。
备注:所谓生产环境就是指:项目开发完毕,要部署到服务器上运行。
3.某些包即属于开发依赖,又属于生产依赖 -------例如:jquery。
3.npm i xxxx -g 全局安装xxxx包(一般来说,带有指令集的包要进行全局安装,例如:browserify、babel等)
查看全局安装的位置:npm root -g
4.npm i xxx@yyy :安装xxx包的yyy版本
5.npm i :安装package.json中声明的所有包
三、【移除】:
npm remove xxxxx 在node_module中删除xxxx包,并且删除该包在package.json中的声明
四、【其他命令】:
1.npm aduit fix :检测项目依赖中的一些问题,并且尝试着修复。
2.npm view xxxxx versions :查看npm仓库中xxxx包的所有版本信息
3.npm view xxxxx version :查看npm仓库中xxxx包的最新版本
4.npm ls xxxx :查看我们所安装的xxxx包的版本
五、【关于版本号的说明】:
"^3.x.x" :锁定大版本,以后安装包的时候,保证包是3.x.x版本,x默认取最新的。
"~3.1.x" :锁定小版本,以后安装包的时候,保证包是3.1.x版本,x默认取最新的。
"3.1.1" :锁定完整版本,以后安装包的时候,保证包必须是3.1.1版本。
4.cnpm的使用
cnpm的简介与使用
国内使用npm存在的问题
安装npm后,每次我们安装包时,我们的电脑都要和npm服务器进行对话,去npm仓库获取包。
npm默认的仓库地址为:http://registry.npmjs.org
-
查看当前npm仓库地址命令:
npm config get registry
,提示如下图:
因为npm的远程服务器在国外,所以有时候难免出现访问过慢,甚至无法访问的情况。
为了解决这个问题,我们有以下几个解决办法
使用淘宝的cpm代替npm
淘宝为我们搭建了一个国内的npm服务器,它目前是每隔10分钟将国外npm仓库的所有内容“搬运”回国内的服务器上,这样我们直接访问淘宝的国内服务器就可以了,它的地址是:https://registry.npm.taobao.org
使用方法:
第一种:直接安装cnpm
安装淘宝提供的cnpm,并更改服务器地址为淘宝的国内地址,
命令:npm install -g cnpm --registry=https://registry.npm.taobao.org
,以后安装直接采用cpm
替代npm
,
例如原生npm命令为:npm install uniq --save
,cnpm命令为:cnpm install uniq --save
第二种:替换npm仓库地址为淘宝镜像地址(推荐)
命令:npm config set registry https://registry.npm.taobao.org
,
查看是否更改成功:npm config get registry
,以后安装时,依然用npm命令,但是实际是从淘宝国内服务器下载的
4.yarn的使用
yarn的简介与使用
Yarn发布于2016年10月,截至当前2019年1月,gitHub上的Start数量为:34.3k,已经超过npm很多了,
yarn使用本地缓存,无需互联网连接就能安装本地已经缓存的依赖项,安装方法:npm install -g yarn
特别注意:
由于yarn的全局安装位置与npm不同,所以要配置yarn的全局安装路径到环境变量中,否则全局安装的包不起作用。
具体操作如下:
安装yarn后执行
yarn global dir
命令,获取yarn全局安装位置。
将该位置配置到电脑环境变量中
yarn命令与npm命令的对应关系如下:
初始化项目:
yarn init -y
npm init -y
下载项目的所有声明的依赖:
yarn
npm install
下载指定的运行时依赖包:
yarn add webpack@3.2.1
npm install webpack@3.2.1 -S
下载指定的开发时依赖:
yarn add webpack@3.2.1 -D
npm install webpack@3.2.1 -D
全局下载指定包:
yarn global add webpack
npm install webpack -g
删除依赖包:
yarn remove webpack
npm remove webpack -S
yarn global remove webpack
npm remove webpack -g
运行项目中配置的script:
yarn run xxx
npm run xxx
查看某个包的信息:
yarn info xxx
npm info xxx
设置淘宝镜像:
yarn config set registry https://registry.npm.taobao.org
npm config set registry https://registry.npm.taobao.org