npm从父目录安装

时间:2016-06-29 19:11:18

标签: node.js npm node-modules npm-install package.json

我有一个像这样的目录结构:/a/b/c

目录c包含package.json,应包含node_modules 如何从目录npm install内部执行a

我尝试过这种方式:npm --prefix b/c install b/c但是这样,所有符号链接都是直接在c内创建的,而不是默认的node_modules/.bin

有没有办法实现这个目标?

节点:6.2.2
npm:3.10.2

2 个答案:

答案 0 :(得分:7)

package.json目录中的a中使用npm预安装挂钩可能是这种情况下的最佳选择。

scripts: {
    preinstall: `cd b/c && npm install`
}

这样在目录npm install中运行a也将执行c目录安装并提供无缝的开发体验。

答案 1 :(得分:2)

有点矫枉过正但可能有用......

借助递归,您可以找到node_modules

您可以在父目录中运行此文件以在子目录中查找node_modules并传递npm参数。

注意:在Windows上测试

var child_process = require('child_process');
var fs = require('fs');
var path = require('path');
var safe = 0;

let args = process.argv.splice(2).toString().replace(/,/g ,' ');
function recurse(_path){
safe ++;
if(safe > 5000){
  console.log('directory may be too large')
  return
}

  if(/node_modules$/.test(_path)){
    let cwd = path.resolve(__dirname ,_path)
    console.log('found node_modules at '+cwd)
    child_process.exec(`start cmd.exe /k npm ${args}`,{cwd})

    return
  }
  let directoryList = fs.readdirSync(_path);
    directoryList.forEach(function(nextDir){
    if(fs.statSync(_path+'/'+nextDir).isFile()){
      return

    }
    if(/^\./.test(nextDir)){ //.folder beginging with .
      return
    }
    recurse(_path+'/'+nextDir);

  })
}
recurse('./' )