是否可以自动为node.js脚本安装所需的模块?

And*_*een 13 node.js

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

#!/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.
Run Code Online (Sandbox Code Playgroud)

And*_*Mao 17

是的,有一个很棒的代码叫做NPM就是这样:https://npmjs.org/

您可以在package.json文件中指定依赖包(请参阅文档中的语法),您可以使用npm install .它们一次性将它们全部拉出来,然后require从脚本中取出它们.

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

第一次安装模块时,您可以提供任意数量的模块进行安装,并添加--save参数以自动将其添加到您的模块中package.json

npm i --save dnode request bluebird
Run Code Online (Sandbox Code Playgroud)

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

  • 有没有办法为没有关联的`package.json` 文件的脚本生成依赖项列表?这就是我真正想在这里找到的,因为我只是在处理一个文件。 (2认同)

Ami*_*ein 5

我为此写了一个脚本.
将其放在脚本的开头,并在运行时安装任何已卸载的模块.

(function () {
  var r = require
  require = function (n) {
    try {
      return r(n)
    } catch (e) {
      console.log(`Module "${n}" was not found and will be installed`)
      r('child_process').exec(`npm i ${n}`, function (err, body) {
        if (err) {
          console.log(`Module "${n}" could not be installed. Try again or install manually`)
          console.log(body)
          exit(1)
        } else {
          console.log(`Module "${n}" was installed. Will try to require again`)
          try{
            return r(n)
          } catch (e) {
            console.log(`Module "${n}" could not be required. Please restart the app`)
            console.log(e)
            exit(1)
          }
        }
      })
    }
  }
})()
Run Code Online (Sandbox Code Playgroud)