npm使用过程当中的一些错误解决办法及npm经常使用命令

npm使用过程当中的一些错误解决办法及npm经常使用命令

 node,npm在前端开发流程中提供了很是完善的自动化工具链,可是一样因为其复杂性致使有不少奇奇怪怪的问题。本文将记录使用过程当中出现的一些问题及其解决方法备案。html

  • 国内因为gfw问题,致使不少国外的网站不能访问,好比bitbucket就是一个host代码的很优秀平台,可是因为该平台可能被block住,从而致使npm安装时出现奇奇怪怪的问题。有如下方法解决:
1.使用一个proxy来代理访问,可是这个方法速度可能比较慢;
2.能够经过修改npm的配置文件让npm到另外的pacakge mirror站点去找package,经过以下命令
$npm config set registry https://registry.npm.taobao.org
或者:npm install
或者直接在命令行中指定某些参数,好比phantomjs是一个无图形界面的浏览器,在自动化测试中应用普遍,可能的安装方式:$ npm config set registry http://r.cnpmjs.orgnpm config set registry http://registry.npmjs.eu
随后再执行
npm install phantomjs --phantomjs_cdnurl=http://cnpmjs.org/downloads 若是上述方法都不奏效,那么可能须要 配置本身网卡的dns为国外的dns
  • 若是你在企业防火墙的后面,上网是经过企业的代理来上的,那么须要配置proxy和https-proxy
npm config set proxy http://proxy.company.com:8080
npm config set https-proxy http://proxy.company.com:8080

 

  • 在linux下面,你可能须要使用-g参数安装一些package做为global,好比grunt,gulp,bower等,可是你又没有root权限,就有可能出现下面的错误:
$ npm install -g gulp                                                                                                                                                      
npm ERR! tar.unpack untar error /home/cabox/.npm/gulp/3.9.0/package.tgz                                                                                                    
npm ERR! Linux 2.6.32-042stab104.1                                                                                                                                         
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "-g" "gulp"                                                                                             
npm ERR! node v0.12.3                                                                                                                                                      
npm ERR! npm  v2.9.1                                                                                                                                                       
npm ERR! path /usr/local/lib/node_modules/gulp                                                                                                                             
npm ERR! code EACCES                                                                                                                                                       
npm ERR! errno -13                                                                                                                                                         
                                                                                                                                                                           
npm ERR! Error: EACCES, mkdir '/usr/local/lib/node_modules/gulp'                                                                                                           
npm ERR!     at Error (native)                                                                                                                                             
npm ERR!  { [Error: EACCES, mkdir '/usr/local/lib/node_modules/gulp']                                                                                                      
npm ERR!   errno: -13,                                                                                                                                                     
npm ERR!   code: 'EACCES',                                                                                                                                                 
npm ERR!   path: '/usr/local/lib/node_modules/gulp',                                                                                                                       
npm ERR!   fstream_type: 'Directory',                                                                                                                                      
npm ERR!   fstream_path: '/usr/local/lib/node_modules/gulp',                                                                                                               
npm ERR!   fstream_class: 'DirWriter',                                                                                                                                     
npm ERR!   fstream_stack:                                                                                                                                                  
npm ERR!    [ '/usr/local/lib/node_modules/npm/node_modules/fstream/lib/dir-writer.js:36:23',                                                                              
npm ERR!      '/usr/local/lib/node_modules/npm/node_modules/mkdirp/index.js:46:53',                                                                                        
npm ERR!      'FSReqWrap.oncomplete (fs.js:95:15)' ] }                                                                                                                     
npm ERR!                                                                                                                                                                   
npm ERR! Please try running this command again as root/Administrator.                                                                                                      
                                                                                                                                                                           
npm ERR! Please include the following file with any support request:                                                                                                       
npm ERR!     /home/cabox/npm-debug.log

可能的解决方案是修改npm将安装的目标目录的ownershipi:前端

$ npm config get prefix                                                                                                                                                    
/usr/local                                                                                                                                                                 
$ whoami                                                                                                                                                                   
cabox                                                                                                                                                                      

上面的命令能够查到你是以cabox用户来运行命令的,npm将全局package安装package到/usr/local下面的lib/node_modules目录下面,好比gulp,bower,grunt等须要全局安装的node module都将存放到这里,而若是你对该目录没有写的权限,则会出现问题,所以你能够作的是chown -R /usr/local your_usernamenode

可是这个方案也是有缺点的,特别是当一个系统中有多个用户使用时,你把这些公共目录都搞成你本身的ownership,可能会存在问题。linux

另一种可能的解决方案修改上述prefix,指定npm的全局package安装目录为本身的Home目录下面的子目录,同时须要将上述子目录放到path中去,这样就可以将npm的全局package安装到这个咱们有权限控制的目录中了。laravel

$ npm config set prefix /home/cabox/npm-global/                                                                                                                            
$ npm config get prefix                                                                                                                                                    
/home/cabox/npm-global                                                                                                                                                     
$ gulp                                                                                                                                                                     
-bash: gulp: command not found                                                                                                                                             
$ npm install -g gulp                                                                                                                                                      
/home/cabox/npm-global/bin/gulp -> /home/cabox/npm-global/lib/node_modules/gulp/bin/gulp.js                                                                                
gulp@3.9.0 /home/cabox/npm-global/lib/node_modules/gulp                                                                                                                    
├── pretty-hrtime@1.0.0                                                                                                                                                    
├── interpret@0.6.2                                                                                                                                                        
├── deprecated@0.0.1                                                                                                                                                       
├── archy@1.0.0                                                                                                                                                            
├── minimist@1.1.1                                                                                                                                                         
├── tildify@1.0.0 (user-home@1.1.1)                                                                                                                                        
├── v8flags@2.0.5 (user-home@1.1.1)                                                                                                                                        
├── chalk@1.0.0 (escape-string-regexp@1.0.3, ansi-styles@2.0.1, supports-color@1.3.1, strip-ansi@2.0.1, has-ansi@1.0.3)                                                    
├── semver@4.3.6                                                                                                                                                           
├── orchestrator@0.3.7 (stream-consume@0.1.0, sequencify@0.0.7, end-of-stream@0.1.5)                                                                                       
├── liftoff@2.1.0 (extend@2.0.1, rechoir@0.6.1, flagged-respawn@0.3.1, resolve@1.1.6, findup-sync@0.2.1)                                                                   
├── gulp-util@3.0.5 (array-differ@1.0.0, array-uniq@1.0.2, lodash._reescape@3.0.0, lodash._reevaluate@3.0.0, beeper@1.1.0, lodash._reinterpolate@3.0.0, object-assign@2.1.1
, replace-ext@0.0.1, vinyl@0.4.6, lodash.template@3.6.1, through2@0.6.5, multipipe@0.1.2, dateformat@1.0.11)                                                               
└── vinyl-fs@0.3.13 (graceful-fs@3.0.8, strip-bom@1.0.0, defaults@1.0.2, vinyl@0.4.6, mkdirp@0.5.1, through2@0.6.5, glob-stream@3.1.18, glob-watcher@0.0.6)

 

上面使用cabox用户安装gulp到/home/cabox/npm-global目录中去了。git

详细参照下面的两篇文章github

http://www.johnpapa.net/how-to-use-npm-global-without-sudo-on-osx/npm

https://github.com/sindresorhus/guides/blob/master/npm-global-without-sudo.mdjson

可是如今还有一个问题,那就是系统path中并无包含该目录,所以直接运行gulp仍是没法找到的 gulp

在.bash_profile中添加如下:

PATH=$PATH:$HOME/bin:$HOME/npm-global/bin                                                                                                                                  

  • npm config ls 将列出全部已经配置好的npm选项 
  • 若是遇到一些莫名其妙的问题,你首先能够更新一下npm版本,删除npm的cache
    npm install -g npm@latest或npm install npm -g
    npm cache clear && rm -rf node_modules && npm install
  • npm ls 和 npm uninstal删除已安装的package. npm ls packagewitherror将列出有问题的那个package安装在哪里,这样你就能够直接到那个目录从新单独安装那个pacakge,调查不能安装成功的缘由。

     

    [cabox@box-codeanywhere npmtest]$ npm install --save lodash                                                                                                                
    npm WARN package.json kidsit@1.0.0 No repository field.                                                                                                                    
    npm WARN package.json kidsit@1.0.0 No README data                                                                                                                          
    lodash@3.9.3 node_modules/lodash                                                                                                                                           
    [cabox@box-codeanywhere npmtest]$ ls                                                                                                                                       
    node_modules  package.json                                                                                                                                                 
    [cabox@box-codeanywhere npmtest]$ vi package.json                                                                                                                          
    [cabox@box-codeanywhere npmtest]$ ls                                                                                                                                       
    node_modules  package.json                                                                                                                                                 
    [cabox@box-codeanywhere npmtest]$ npm ls                                                                                                                                   
    kidsit@1.0.0 /home/cabox/workspace/npmtest                                                                                                                                 
    └── lodash@3.9.3               
    [cabox@box-codeanywhere npmtest]$ npm uninstall lodash --save                                                                                                              
    unbuild lodash@3.9.3
    在这里若是node系统的模块安装有问题,这里会主动列出来:

    ├── camelcase@1.1.0
    ├─┬ cliui@2.1.0
    │ ├─┬ center-align@0.1.1
    │ │ └─┬ align-text@0.1.1
    │ │ ├── kind-of@1.1.0
    │ │ ├── longest@1.0.1
    │ │ └── repeat-string@1.5.2
    │ ├─┬ right-align@0.1.1
    │ │ └─┬ align-text@0.1.1
    │ │ ├── kind-of@1.1.0
    │ │ ├── longest@1.0.1
    │ │ └── repeat-string@1.5.2
    │ └── wordwrap@0.0.2
    ├── decamelize@1.0.0
    └── window-size@0.1.0

    npm ERR! missing: bytes@1.0.0, required by body-parser@1.12.4
    npm ERR! missing: content-type@~1.0.1, required by body-parser@1.12.4
    npm ERR! missing: depd@~1.0.1, required by body-parser@1.12.4
    npm ERR! missing: iconv-lite@0.4.8, required by body-parser@1.12.4
    npm ERR! missing: on-finished@~2.2.1, required by body-parser@1.12.4
    npm ERR! missing: qs@2.4.2, required by body-parser@1.12.4
    npm ERR! missing: raw-body@~2.0.1, required by body-parser@1.12.4
    npm ERR! missing: type-is@~1.6.2, required by body-parser@1.12.4

    复制代码

  • 若是你的node_modules目录中已经安装了一个package,可是package.json中并无对该package作依赖,那么这个package就应该被删除。这时若是执行npm ls命令则指示有一个package not used。为了清理代码,你须要执行npm prune

     

    [cabox@box-codeanywhere npmtest]$ npm install lodash                                                                                                                       
    npm WARN package.json kidsit@1.0.0 No repository field.                                                                                                                    
    npm WARN package.json kidsit@1.0.0 No README data                                                                                                                          
    lodash@3.9.3 node_modules/lodash                                                                                                                                           
    [cabox@box-codeanywhere npmtest]$ ls node_modules/                                                                                                                         
    lodash                                                                                                                                                                     
    [cabox@box-codeanywhere npmtest]$ npm ls                                                                                                                                   
    kidsit@1.0.0 /home/cabox/workspace/npmtest                                                                                                                                 
    └── lodash@3.9.3 extraneous                                                                                                                                                
                                                                                                                                                                               
    npm ERR! extraneous: lodash@3.9.3 /home/cabox/workspace/npmtest/node_modules/lodash                                                                                        
    [cabox@box-codeanywhere npmtest]$ npm prune                                                                                                                                
    npm WARN package.json kidsit@1.0.0 No repository field.                                                                                                                    
    npm WARN package.json kidsit@1.0.0 No README data                                                                                                                          
    unbuild lodash@3.9.3                                                                                                                                                       
    [cabox@box-codeanywhere npmtest]$ npm ls                                                                                                                                   
    kidsit@1.0.0 /home/cabox/workspace/npmtest                                                                                                                                 
    └── (empty)                                  

     

  • npm ls -g --depth=0能够列出已经安装的全局package

     

    [cabox@box-codeanywhere npmtest]$ npm ls -g --depth=0                                                                                                                      
    /home/cabox/npm-global/lib                                                                                                                                                 
    ├── gulp@3.9.0                                                                                                                                                             
    └── npm@2.11.1                                                                                                                                                             
                                                                                                                                                                               
    [cabox@box-codeanywhere npmtest]$ npm uninstall -g gulp                                                                                                                    
    unbuild gulp@3.9.0                                                                                                                                                         
    [cabox@box-codeanywhere npmtest]$ npm ls -g --depth=0                                                                                                                      
    /home/cabox/npm-global/lib                                                                                                                                                 
    └── npm@2.11.1

     

  • 为了publish一个package,你须要有如下流程: npm init建立一个package.json,建立入口js,好比index.js,exports相应接口,随后npm adduser, npm publish就能够了。若是要更新你的package,注意须要将版本号作一下变动(npm version patch,npm version minor, npm version major或者手动修改本package的package.json文件的版本号!),publish完成后,你能够在https://www.npmjs.com/~kidsit网页上查看是否确实publish了一个package。注意:npm package遵循semantic versioning method, major.minor.patch/patch表示bugfix,minor:表示new feature,major表示api没法保持兼容。
    [cabox@box-codeanywhere npmtest]$ npm adduser                                                                                                                              
    Username: kidsit                                                                                                                                                           
    Password:                                                                                                                                                                  
    Email: (this IS public) 1372921435@qq.com                                                                                                                                  
    [cabox@box-codeanywhere npmtest]$ npm config ls                                                                                                                            
    ; cli configs                                                                                                                                                              
    user-agent = "npm/2.11.1 node/v0.10.28 linux x64"                                                                                                                          
                                                                                                                                                                               
    ; userconfig /home/cabox/.npmrc                                                                                                                                            
    prefix = "/home/cabox/npm-global"                                                                                                                                          
                                                                                                                                                                               
    ; node bin location = /usr/bin/node                                                                                                                                        
    ; cwd = /home/cabox/workspace/npmtest                                                                                                                                      
    ; HOME = /home/cabox                                                                                                                                                       
    ; 'npm config ls -l' to show all defaults.                                                                                                                                 
                                                                                                                                                                               
    [cabox@box-codeanywhere npmtest]$ npm publish                                                                                                                              
    + kidsit@0.0.1                                                                                                                                                             
    [cabox@box-codeanywhere npmtest]$

     

  •  http://blog.izs.me/post/1675072029/10-cool-things-you-probably-didnt-realize-npm

  • npm通常在哪些目录搜索须要require的模块呢?
    var utils = require( "utils" );
    上面的require命令将致使node按照如下顺序查找文件,注意不必定是index.js,这个由package.json中的main定义决定的
    ./node_modules/utils.js
    ./node_modules/utils/index.js
    ./node_modules/utils/package.json

    具体参考http://www.bennadel.com/blog/2169-where-does-node-js-and-require-look-for-modules.htm

  • 在windows host中的vagrant box linux中使用npm install时,因为host os不支持linux的symbol link,因此必须使用:npm install --no-bin-links命令,不然会出现
    info unbuild /home/nicholas/share/node_modules/yuitest
    verbose link symlinking /usr/local/lib/node_modules/yuitest to /home/nicholas/share/node_modules/yuitest
    ERR! Error: EPROTO, Protocol error '/usr/local/lib/node_modules/yuitest'
  • 在执行npm install时若是出现大量的EPERM错误时,颇有多是反病毒软件惹的祸!,同时有多是npm cache clear没有执行,参考:http://blogs.msdn.com/b/matt-harrington/archive/2012/02/23/how-to-fix-node-js-npm-permission-problems.aspx
    Error: EPERM, operation not permitted 'C:\...\noam\node_modules\phantomjs\tmp\phantomjs-1.7.0-windows'
        at Object.fs.renameSync (fs.js:439:18)
  • gulp 是一个task runner,它和grunt的功能差很少,可是却比grant要快不少,它基于stream,pipe
  • 在win7,win10下安装npm install时,颇有可能出现 error MSB3411: Could not load the Visual C++ component "VCBuild.exe". ...  的错误,一个可行的方案是:
npm config set msvs_version 2012 --global

 如何列出一个特定模块的依赖关系?

有时咱们但愿看清楚一个模块究竟是由于谁被安装进来的,也就是说它是哪一个package的依赖,你可使用npm ll命令:

好比下面的命令npm -- gulp-less命令你就能够看出,原来gulp-less这个模块在laravel-elixir模块中包含而安装的,也就是说laravel-elixir已经包含了less预处理功能!

 

$ npm ll gulp-less
laravel-elixir@5.0.0
│ C:\Users\Administrator\devenvironment\Code\newkidsitfromscratch\node_modules\laravel-elixir
│ Laravel Elixir Core
│ git+https://github.com/laravel/elixir.git
│ https://github.com/laravel/elixir
└── gulp-less@3.1.0
    Less for Gulp
    git://github.com/plus3network/gulp-less.git
    https://github.com/plus3network/gulp-less#readme

 

 npm view gulp-less查看gup-less这个模块的meta信息

https://github.com/substack/stream-handbook

  • npm 命令大全参考: http://browsenpm.org/help
  • npm peerDependency问题:一个可行的思路是:首先升级npm3,而后再分析版本的依赖关系!
  • npm install安装时可能会涉及到phantomjs-2.1.1-windows.zip没法安装致使失败的问题,解决办法:手动下载phantomjs-1.9.7-windows.zip,复制到C:\Users\ADMINI~1\AppData\Local\Temp\phantomjs\目录,再次执行npm install mocha-phantomjs,安装成功 http://download.csdn.net/detail/f907279313/9575566
  • windows下如何平滑升级npm3?

参考这篇 https://github.com/felixrieseberg/npm-windows-upgrade 文章,写的很是详细,强烈建议升级到npm3,一些怪异的npm模块安装问题都会没有了!

 windows下面的node-pre-gyp安裝依賴問題

fsevents: AttributeError: 'MSVSProject' object has no attribute 'iteritems'

上述錯誤的缘由是windows机器上没有安装build tooling依赖,解决办法是:

npm install --global --production windows-build-tools

参考: https://github.com/nodejs/node-gyp

相关文章
相关标签/搜索