2013-01-08 76 views
9

是否可以自动下载node.js脚本所需的模块?我想知道是否可以为node.js脚本生成所需模块的列表(如下所示),并自动安装它们,而不是手动安装它们(使用npm)。是否可以自动安装node.js脚本所需的模块?

#!/usr/bin/env node 

var DNode = require('dnode'); 
var sys = require('sys'); 
var fs = require('fs'); 
var http = require('http'); 

var html = fs.readFileSync(__dirname + '/web.html'); 
var js = require('dnode/web').source(); 

//the rest of this script is omitted. 
+0

的可能的复制[可以安装所有缺少的模块节点应用程序吗?(http://stackoverflow.com/questions/13189239/possible-to-install-all-missing-模块为节点的应用程序) –

回答

13

是的,有很大一块的代码中调用NPM正是这种:https://npmjs.org/

您指定一个package.json文件相关的软件包(see the docs语法),你可以使用npm install .拉他们在所有立刻,然后require他们从您的脚本。

的package.json语法页:https://docs.npmjs.com/getting-started/using-a-package.json

安装模块的第一次,你可以提供任何数量的安装模块,并添加--save参数将自动添加到您的package.json

npm i --save dnode request bluebird 

下次有人会执行npm i它会自动安装您指定的所有模块package.json

+0

有没有什么办法可以为没有'package.json'文件的脚本生成一个依赖关系列表?这正是我真正想在这里找到的,因为我只是在处理单个文件。 –

+0

我希望为一个还没有与之关联的'package.json'文件的模块生成'package.json'文件是可行的。 –

+1

如果你想要在脚本开始时需要所有模块,为什么不把它们记录在你的包文件中呢?你是否追求一些自动手段来解析和获取脚本执行期间的依赖关系? 'package.json'也很有用,因为你可以指定你的依赖的版本,并且确保事情在你的脚本未来运行时不会中断。 –

6

我有w雷农脚本这个

(function(){ 
    var r = require 
    require = function (n){ 
     try{ 
      return r(n) 
     } 
     catch(e){ 
      r('child_process').exec('npm i ' + n,function (err,body){ 
       try{ 
        console.log('Module "' +n + '"" not found, try to install. Please restart the app\n' + body) 
        return r(n) 
       } 
       catch(e){ 
       } 
      }) 
     } 
    } 
})() 
相关问题