找回密码
 立即注册
查看: 4338|回复: 4

解决npm install 安装慢!!!

[复制链接]

319

主题

485

回帖

3133

积分

管理员

积分
3133
QQ
发表于 2023-6-9 00:27:24 | 显示全部楼层 |阅读模式
安装慢的原因. R6 Y- u- B. }: x/ ]' C
npm install 默认使用的安装镜像是国外的镜像,😒😒( t' U7 d4 i3 r: ^2 P- u& P; o
所以在国内使用,会受到网络的限制,所以导致安装速度及其之慢,有的时候,会因为网速问题直接报错7 f+ |/ C5 p% f

4 E% i( G% X4 R1 \7 E$ }解决方式
3 ~$ z& `, T2 [% V7 z方式一:更换npm的安装镜像源为国内的即可改变
* ?3 E# v2 T2 z! |方式二:更换网络(一般不会这么做)
, s' ]( c" g% i/ a/ F/ N+ W6 t
% H: K7 r) u+ V: R【更换npm源】:6 y4 t  E6 l4 L* |6 x0 A

% i: @3 R' K) J. R
npm config set registry https://registry.npm.taobao.org
' Y* a7 l" z0 _
如果没有报错就是已经切换成功,然后我们再次执行 npm install3 A- n, h* b, }$ k
或者我们可以在安装的时候指定其安装镜像
" }( u* V/ ^0 h$ t6 k; v8 S) A) N1 R2 d
npm install --registry=https://registry.npm.taobao.org
* B  ~' T4 _+ v3 A+ _1 o$ N
最后 我们可以查看一下
, g$ ^1 E, r3 l3 q执行命令:
3 g! Z6 h& c9 W" j& t- J
( K) k3 p, v  V0 ]9 Q
npm config get registry
回复

使用道具 举报

319

主题

485

回帖

3133

积分

管理员

积分
3133
QQ
 楼主| 发表于 2023-6-9 00:51:41 | 显示全部楼层
yarn安装依赖速度太慢的解决办法7 q7 t: e2 M, U# j3 r
- ~/ ?2 {1 Q1 ~
1、在用户目录文件夹下找到.yarnc文件(如我的是在:C:\Users\钟志胜\下): j6 g3 m. _( p( f" d: S( v  Y
4 z# {+ \7 l  B9 ]) d* ]: j
2、编辑.yarnc文件,添加如下内容. l* A) j0 d1 i5 d% i/ G$ G/ R& a
registry "https://registry.npm.taobao.org", J/ F, s% q: l: P; u8 R
chromedriver_cdnurl "https://cdn.npm.taobao.org/dist/chromedriver"
& ?. A/ n  E% A" u* G9 A0 D  }( t) Celectron_mirror "https://npm.taobao.org/mirrors/electron/"6 q# }: v0 L* l+ ]
lastUpdateCheck 1664005622411
( `7 E" W0 A' O  J% B1 i/ yphantomjs_cdnurl "http://cnpmjs.org/downloads"
' e9 j- I7 j' d" @6 e% wprofiler_binary_host_mirror "https://npm.taobao.org/mirrors/node-inspector/"1 A8 z) v* i4 H, a+ R  B4 S1 c) f
sass_binary_site "https://npm.taobao.org/mirrors/node-sass/"' ~& j2 p4 |) b' k4 B6 n
sqlite3_binary_host_mirror "https://foxgis.oss-cn-shanghai.aliyuncs.com/"

3 N+ C! g* `4 d# J$ a; Q4 r, P3、编辑后保存文件! _* W! @8 r$ c1 z, \  x) M
- y& K8 g0 {6 j: X$ ?
4、设置为淘宝镜像
: ~& B6 @( f, d# [- P3 W" ]" |
npm config set registry https://registry.npm.taobao.org/! e2 _* v! u- S8 S1 c
yarn config set registry https://registry.npm.taobao.org/

& [4 n) H7 e* V9 t4 q* z; n! L( g( x" L3 z$ @7 k2 _* f; y# _
5、查看当前镜像
3 U9 m% n, ^! _0 M' f7 p9 M
npm get registry 9 m, F9 |$ P# `+ s! R6 d/ k
yarn config get registry
3 K5 j8 ]/ U) d7 y$ x% P

/ L/ J* |" u' k8 D8 O+ P6、把项目下的yarn.lock文件删除
6 `( m7 n1 j6 u& w" I4 U
7 {6 j  o* a6 A$ }7 C! J& L$ ?- I7、重新执行yarn进行安装,速度有很大提升
% m# i, X- O* i+ e( S
回复

使用道具 举报

319

主题

485

回帖

3133

积分

管理员

积分
3133
QQ
 楼主| 发表于 2023-6-9 01:08:09 | 显示全部楼层
npm安装任何包都报错的解决办法
0 w) J# ]: C- C4 h0 C" n& d6 L! F( Q' y: m+ q8 b
不知道什么原因,安装nodejs后,用npm安装任何东西都报错:
9 t& f2 L0 Q! B; H
  1. C:\Users\Administrator>npm install express% w% a" z1 [7 I$ @/ a  k* N
  2. npm ERR! Windows_NT 6.1.7601' s' `5 K: ?1 Q4 G( p& o+ x# `& y1 [
  3. npm ERR! argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "express"
    9 V$ q9 F' i# L
  4. npm ERR! node v4.4.4
    3 [& D% z( ?# h
  5. npm ERR! npm  v2.15.1
    ; @+ W" I' J# l2 ~% p
  6. npm ERR! code ENOTFOUND5 R$ u, A/ h" X3 _$ {& e
  7. npm ERR! errno ENOTFOUND
    ; {' T6 ~+ B0 ^/ `
  8. npm ERR! syscall getaddrinfo
    - f$ c: K" {8 y1 Y$ ?$ f

  9. / }! A) o* j' A" g
  10. npm ERR! network getaddrinfo ENOTFOUND xn--rvg xn--rvg:808 }+ f5 a- }2 H. S* P
  11. npm ERR! network This is most likely not a problem with npm itself
    / q# f, G4 H" f/ z, D) `
  12. npm ERR! network and is related to network connectivity.
    " C' v8 D6 r; G8 i- o% R# X
  13. npm ERR! network In most cases you are behind a proxy or have bad network settings.
    4 C9 |3 \( Y4 [  s* u, M
  14. npm ERR! network
    ' r4 E( e) a. O
  15. npm ERR! network If you are behind a proxy, please make sure that the. P9 y: t: k( m/ O* |7 z! z
  16. npm ERR! network 'proxy' config is set properly.  See: 'npm help config'
    1 ?) _* ?5 N2 @7 i! v# V

  17. 9 I% e7 _4 t: R6 x. x
  18. npm ERR! Please include the following file with any support request:: R, o) g, }; @5 r7 [
  19. npm ERR!     C:\Users\Administrator\npm-debug.log
复制代码

! Y- r0 r) o* ]6 P
1 G0 o/ P! g9 x/ ?+ N0 u# k. O然后查npm的配置,也是一脸懵逼1 I, c+ Z& J; |5 F/ j7 U) R

% ]# H; d) U" I) j5 |, x, @7 M/ K% Z
  1. - w: K# C. S) ~7 ]- L
  2. C:\Users\Administrator>npm config ls
    6 E- K" ^$ p4 R% s* ]
  3. ; cli configs8 t* P, v7 b; m# ]+ ]5 A; R
  4. user-agent = "npm/2.15.1 node/v4.4.4 win32 x64"2 z- ^' Z& \, i. {% c: z

  5. & x" Q) i  {$ s" J5 O
  6. ; userconfig C:\Users\Administrator\.npmrc9 `+ `2 X$ c5 ?- H& K
  7. disturl = "https://npm.taobao.org/dist"  {0 {  V1 }; I$ h* W+ ^
  8. proxy = "http://xn--rvg/"
    - O* t( X" c/ z  j1 e6 K
  9. registry = "http://registry.npmjs.org/"! L- _+ Q4 N& E5 R/ x
  10. strict-ssl = false
    8 d9 k: x( b" k0 S
  11. unsafe-perm = true
    2 G2 [6 c/ p/ F# v5 p) ~
  12. ' d: @/ X4 V: Z' k8 z- t" E
  13. ; builtin config undefined
    * U- A0 T; w/ Z. e1 S5 C' q  I
  14. cache = "C:\\Program Files\\nodejs\\node_global"3 s+ ]8 h' L" ?& f/ ?& O
  15. prefix = "C:\\Program Files\\nodejs\\node_global"
    - L% i6 `7 N! P# ?* w8 w
  16. 6 q; i3 |% ?% a  s8 `
  17. ; node bin location = C:\Program Files\nodejs\node.exe
    - l+ x; ^. t8 F( ~* ]1 H
  18. ; cwd = C:\Users\Administrator
    4 j) ]  A) U. }$ V2 g# {9 X; ]
  19. ; HOME = C:\Users\Administrator
    ' V4 H4 K- |+ d6 P. `
  20. ; 'npm config ls -l' to show all defaults.
复制代码
  c: e! Q+ @" D% ^. O# {5 R

# D) d$ ?( A0 s5 G% g5 w  W根据网上的教程,换了N种镜像,问题依旧存在
6 q" R) c* O/ E3 N& {0 h" G6 r2 [9 Z( K
然后终于在网上找到个解决办法:
; y  M2 F! R6 H5 f. a
) d* s, S1 `2 e5 q% |9 N
  1. 解决办法:0 i* U8 a" M0 n6 m( z
  2. ; x! d/ d4 N! s! _
  3. 1、执行:
    2 \0 g  @# O& g. I
  4. 3 i! w# ~- o& H  X
  5. npm config get proxy
    $ @" [2 ?7 e2 i
  6. npm config get https-proxy& Y1 B/ [( z7 S! v2 G  j
  7. 如果返回值不为null,继续执行:
    ' M4 M9 Y+ L3 ?  }
  8. (这一步很重要,一定要保证两个命令的返回值都为null,话说回来,应该出现这个错误这两个返回值有不为null的)4 F; B, X3 m$ V+ j$ q( g# R7 o4 [5 [
  9. npm config set proxy null; C: O7 S: O( Y4 N9 k* p8 Z0 V) s
  10. npm config set https-proxy null) N% Y# ]+ E" ^' g2 V+ Y8 t5 H7 N
  11. 2、执行:. g" u- ~  z8 g3 L( x5 D1 y+ e
  12. npm config set registry http://registry.cnpmjs.org/
复制代码
- Q# N: p) Q% f  h( ]0 T

% f0 w, C2 A6 ~: L3 g( O然后你就可以愉快的安装cnpm了9 v+ y7 d' {1 O2 P6 P% H

6 F7 M: J! Z, b1 o+ ^
  1. npm install -g cnpm --registry=https://registry.npm.taobao.org
复制代码
$ o2 O" q- U" |$ `4 _1 P& G) v( P
然后你就可以更加愉快的用cnpm安任何东西了
回复

使用道具 举报

319

主题

485

回帖

3133

积分

管理员

积分
3133
QQ
 楼主| 发表于 2023-6-9 01:33:03 | 显示全部楼层
解决使用yarn安装依赖出现“The engine "node" is incompatible with this module. Expected version "^14.18.0 || ^16.14.0 || >=18.0.0". Got "17.9.0"”的问题
% {& C* @4 e+ [" @) ~% l4 h* \
! Y& t8 w3 ?5 M9 Y7 j# D0 c6 d7 t6 b1、问题描述5 {! D. ~# K  g' D2 t5 }1 ?& Z
# Y% z4 B& l& V" g/ I! w
某天在使用yarn安装依赖的时候,突然出现如下错误导致安装依赖终止:
3 I- `* l' a/ Y. L5 d( t4 M5 F% _, W  t6 j7 s
  1. The engine "node" is incompatible with this module. Expected version "^14.18.0 || ^16.14.0 || >=18.0.0". Got "17.9.0"
复制代码

: I$ _6 P! N) u* q/ m
! p6 B/ |, S% H; N3 T0 Y9 N2、解决办法
( N" u4 {# R9 M& z" B+ k使用如下命令忽略错误:; S& \$ p3 V5 u- @( l
6 e8 V) Y' I, h
yarn config set ignore-engines true
5 _5 h3 c4 }% D$ z
' ?8 U: v0 H/ \/ s然后再使用yarn进行安装即可
回复

使用道具 举报

319

主题

485

回帖

3133

积分

管理员

积分
3133
QQ
 楼主| 发表于 2023-6-9 03:02:21 | 显示全部楼层
  1. tyarn( O( S+ |9 _/ l5 F4 |6 K" Z# A8 p7 s/ d
  2. yarn install v1.22.199 \+ }& h3 i6 X% a/ Y. v
  3. [1/4] Resolving packages...6 c" X6 t5 s% n8 Z
  4. [2/4] Fetching packages...
    : K1 K  F* q( o
  5. [3/4] Linking dependencies...
    1 k! k+ F3 |; ?3 q4 i
  6. warning " > sass-loader@8.0.2" has unmet peer dependency "webpack@^4.36.0 || ^5.0.0"." f' R. P! d2 d8 ^0 a8 p
  7. [4/4] Building fresh packages...
    & a8 c+ F- d6 k% U  V$ z& @
  8. Done in 19.63s.
    ! a8 R- L' ~2 f
  9. PS D:\jsq\formG\form-generator-dev\form-generator-dev> npm run dev
    * q2 b: n% S; _' ^- ~
  10. 6 p1 Y/ `2 l3 T9 z; V% m( N7 }
  11. > form-generator@0.2.0 dev* o: L# Z3 I7 z5 q
  12. > vue-cli-service serve9 w! |+ x' f0 @; d

  13. & M" K) V4 z- ?" }! V
  14. INFO  Starting development server...
    1 `' L5 y# G. |
  15. 10% building 4/6 modules 2 active D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\webpack\hot\dev-server.jsError: error:0308010C:digital envelope routines::unsupported
    % `# K/ D$ c' u4 e0 p! {6 k9 c
  16.     at new Hash (node:internal/crypto/hash:71:19)
    : K; x; Q1 N4 X+ [) I0 f0 R
  17.     at Object.createHash (node:crypto:133:10)
    ' X5 m. W0 a- z
  18.     at module.exports (D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\webpack\lib\util\createHash.js:135:53)
    - B* g/ h4 r, Y2 X: d) d. b
  19.     at NormalModule._initBuildHash (D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\webpack\lib\NormalModule.js:417:16)
    ' I2 w7 [2 m  k8 j9 Y. ]
  20.     at handleParseError (D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\webpack\lib\NormalModule.js:471:10)
    ; g4 i3 W5 i1 O/ E5 v% I4 @  d8 W
  21.     at D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\webpack\lib\NormalModule.js:503:5
    8 w- S6 I2 f, v( l4 {. p
  22.     at D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\webpack\lib\NormalModule.js:358:12
    " ^/ S2 F& ^* E3 @& e) |  l
  23.     at D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\loader-runner\lib\LoaderRunner.js:373:3/ H! _2 R1 y4 R, W8 l3 F1 p" S5 E2 y; n
  24.     at iterateNormalLoaders (D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\loader-runner\lib\LoaderRunner.js:214:10)0 V" E5 f# x, g
  25.     at iterateNormalLoaders (D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\loader-runner\lib\LoaderRunner.js:221:10), W; J6 l8 N9 O6 f0 `
  26.     at D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\loader-runner\lib\LoaderRunner.js:236:3
    + |3 f) l, Z$ [' F& r  N- D: A, [$ t
  27.     at runSyncOrAsync (D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\loader-runner\lib\LoaderRunner.js:130:11)
    ; u) ^/ y5 |/ C2 F2 X1 s' T! i
  28.     at iterateNormalLoaders (D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\loader-runner\lib\LoaderRunner.js:232:2)
    * n& Y$ d3 U2 w3 H: o0 a
  29.     at Array.<anonymous> (D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\loader-runner\lib\LoaderRunner.js:205:4)2 \. M5 q& q3 p+ C& z: S( O1 J
  30.     at Storage.finished (D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\enhanced-resolve\lib\CachedInputFileSystem.js:55:16)
    7 I1 k! l7 C4 @& X- x
  31.     at D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\enhanced-resolve\lib\CachedInputFileSystem.js:91:9# @0 M. f7 `4 x/ r
  32. Error: error:0308010C:digital envelope routines::unsupported
    8 i6 z6 h, s. ]# w
  33.     at new Hash (node:internal/crypto/hash:71:19)5 A5 [. T8 w/ H( p+ x5 D
  34.     at Object.createHash (node:crypto:133:10)
    8 Z' R0 |3 k$ s9 X# H5 m7 d
  35.     at module.exports (D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\webpack\lib\util\createHash.js:135:53)7 @  ?3 z: T' D- \
  36.     at NormalModule._initBuildHash (D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\webpack\lib\NormalModule.js:417:16)! J/ U3 i) N' D  F, |
  37.     at handleParseError (D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\webpack\lib\NormalModule.js:471:10)
    1 s) q3 F/ ?/ Q7 `  k
  38.     at D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\webpack\lib\NormalModule.js:503:5
    # }' p( P/ s0 K" ^& N
  39.     at D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\webpack\lib\NormalModule.js:358:12, C, a* }  w& G+ X7 B) Q; K
  40.     at D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\loader-runner\lib\LoaderRunner.js:373:3! P/ [5 F4 f9 U! F5 W
  41.     at iterateNormalLoaders (D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\loader-runner\lib\LoaderRunner.js:214:10); _+ ~1 m& N. p9 s% m. O0 M
  42.     at iterateNormalLoaders (D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\loader-runner\lib\LoaderRunner.js:221:10)
    4 U" v/ z; N+ L
  43.     at D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\loader-runner\lib\LoaderRunner.js:236:3
    . Q6 R1 L: J3 n5 K  F
  44.     at runSyncOrAsync (D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\loader-runner\lib\LoaderRunner.js:130:11)
    * g, V2 d9 @6 ~8 Z
  45.     at iterateNormalLoaders (D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\loader-runner\lib\LoaderRunner.js:232:2)9 ^7 E2 t' _  F& M* C
  46.     at Array.<anonymous> (D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\loader-runner\lib\LoaderRunner.js:205:4)
    7 u" T* w- `; _6 l" R' q. ^7 B
  47.     at Storage.finished (D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\enhanced-resolve\lib\CachedInputFileSystem.js:55:16)% U( @5 n2 G1 |3 u
  48.     at D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\enhanced-resolve\lib\CachedInputFileSystem.js:91:9/ y0 m# _0 n- E, |# q2 a
  49. node:internal/crypto/hash:71
    : Z3 N) i9 ?$ T) [5 S8 \
  50.   this[kHandle] = new _Hash(algorithm, xofLen);
    , S) P/ E" v4 r, i
  51.                   ^- [; h5 ]  i; f
  52. 7 ]' z% Z. k& a- v2 ]
  53. Error: error:0308010C:digital envelope routines::unsupported
    2 \- X* Z% Y6 f/ _; T4 a
  54.     at new Hash (node:internal/crypto/hash:71:19)) g/ r0 K9 f" e: M; w! R6 v
  55.     at Object.createHash (node:crypto:133:10)/ W) U5 B% r4 k6 m2 y
  56.     at module.exports (D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\webpack\lib\util\createHash.js:135:53)
    ! j' x! T$ y& a4 q% N
  57.     at NormalModule._initBuildHash (D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\webpack\lib\NormalModule.js:417:16)2 t% V. S8 m! N" s0 ]( w
  58.     at handleParseError (D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\webpack\lib\NormalModule.js:471:10), i; D0 o" M4 n9 h) S* X
  59.     at D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\webpack\lib\NormalModule.js:503:5
    8 V6 o+ }$ I# o5 f
  60.     at D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\webpack\lib\NormalModule.js:358:12
    + r6 m, t  F' q
  61.     at D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\loader-runner\lib\LoaderRunner.js:373:3
    2 o% z  m) c! ~% f- L6 \
  62.     at iterateNormalLoaders (D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\loader-runner\lib\LoaderRunner.js:214:10), C- t  P. e: R! a
  63.     at Array.<anonymous> (D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\loader-runner\lib\LoaderRunner.js:205:4)
    0 X. p% Z2 j7 H; i
  64.     at Storage.finished (D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\enhanced-resolve\lib\CachedInputFileSystem.js:55:16)
    ! f3 c5 V5 K/ W1 w0 {+ G) z; N( f
  65.     at D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\enhanced-resolve\lib\CachedInputFileSystem.js:91:9- d+ r1 V) U- P- x
  66.     at D:\jsq\formG\form-generator-dev\form-generator-dev\node_modules\graceful-fs\graceful-fs.js:123:16
    % n( O. i' d! Z6 B1 y
  67.     at FSReqCallback.readFileAfterClose [as oncomplete] (node:internal/fs/read_file_context:68:3) {' O. Y% |  _7 j' F% v3 X& A% J
  68.   opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ],
    ! B$ |. m4 z0 Y
  69.   library: 'digital envelope routines',! u7 Q8 F" T' }' E7 N
  70.   reason: 'unsupported',& x: G) x5 z! b. t6 B; Z! {
  71.   code: 'ERR_OSSL_EVP_UNSUPPORTED'  s9 e9 `$ R) [" w1 B
  72. }
    - a' H" `% h0 C3 b" b2 Y
  73. ) q# H/ K- ?" H1 J. T3 m5 }
  74. Node.js v18.16.0
    & y8 U( X! p8 z, S# Y
  75. NativeCommandExitException: Program "npm.cmd" ended with non-zero exit code: 1.
复制代码
+ U( `$ x1 E/ c. n8 T/ L" _- M( I

) h- K) Q: F! x6 C- U5 f: ]  e6 z
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|通达产控投资 ( 粤ICP备2023021749号-1|粤公网安备 44030402006137号 )

GMT+8, 2025-7-23 14:23 , Processed in 0.096309 second(s), 3 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表