npm 从父目录安装
npm install from the parent directory
我有这样的目录结构:/a/b/c
目录 c
包含 package.json
并且应该包含 node_modules
.
如何从目录 a
中执行 npm install
?
我试过这种方式:npm --prefix b/c install b/c
但是这样,所有的符号链接都是直接在 c
内部创建的,而不是默认的 node_modules/.bin
.
有什么方法可以实现吗?
节点:6.2.2
npm: 3.10.2
在您的 a
目录中的 package.json
中使用 npm 预安装挂钩可能是这种情况下的最佳选择。
scripts: {
preinstall: `cd b/c && npm install`
}
这样 运行 npm install
在目录 a
中也将安装 c
目录并提供无缝的开发体验。
有点矫枉过正,但可能有用...
借助递归你可以找到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('./' )
我有这样的目录结构:/a/b/c
目录 c
包含 package.json
并且应该包含 node_modules
.
如何从目录 a
中执行 npm install
?
我试过这种方式:npm --prefix b/c install b/c
但是这样,所有的符号链接都是直接在 c
内部创建的,而不是默认的 node_modules/.bin
.
有什么方法可以实现吗?
节点:6.2.2
npm: 3.10.2
在您的 a
目录中的 package.json
中使用 npm 预安装挂钩可能是这种情况下的最佳选择。
scripts: {
preinstall: `cd b/c && npm install`
}
这样 运行 npm install
在目录 a
中也将安装 c
目录并提供无缝的开发体验。
有点矫枉过正,但可能有用...
借助递归你可以找到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('./' )