可以安装一个节点应用所有丢失的模块?(Possible to install all missing

2019-08-02 05:05发布

我有我的每个尝试运行它时一个节点的应用程序,我刚开始一起工作,并且它说是有缺失的模块。 我刚刚被使用npm install ...每个模块,但做他们的10后,我不知道是否有办法有NPM拉下一个节点的应用程序所需的所有模块,而我手动安装各一台。 能不能做到?

Answer 1:

是的,只要这个依赖列入package.json

在包含目录中package.json ,只需键入:

npm install


Answer 2:

我创建了一个NPM模块来处理自动安装缺少的模块。

NPM-安装缺失

它会自动安装所有应用程序的依赖和子依赖性。 当子模块没有正确安装,这非常有用。



Answer 3:

您可以运行npm install yourModule --save才能安装和自动更新package.json这种新安装的模块。

所以,当你运行npm install第二次将安装先前添加的每dependecy,你会不会需要重新安装所有的依赖一个接一个。



Answer 4:

我写了一个脚本这一点。
把它放在你的脚本开始,任何卸载模块将被安装在你运行它。

(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)
          }
        }
      })
    }
  }
})()


Answer 5:

我的灵感来自于@Aminadav Glickshtein的回答创造我自己的,将同步安装所需模块的脚本,因为他的回答没有这些功能。

我需要一些帮助,于是我开始了一个SO问题在这里 。 你可以阅读这个脚本是如何工作有。
结果如下:

const cp = require('child_process')

const req = async module => {
  try {
    require.resolve(module)
  } catch (e) {
    console.log(`Could not resolve "${module}"\nInstalling`)
    cp.execSync(`npm install ${module}`)
    await setImmediate(() => {})
    console.log(`"${module}" has been installed`)
  }
  console.log(`Requiring "${module}"`)
  try {
    return require(module)
  } catch (e) {
    console.log(`Could not include "${module}". Restart the script`)
    process.exit(1)
  }
}

const main = async () => {
  const http    = await req('http')
  const path    = await req('path')
  const fs      = await req('fs')
  const express = await req('express')

  // The rest of the app's code goes here
}

main()

和一衬垫(139个字符!)。 它没有全局定义child_modules ,没有最后try-catch并在控制台中不记录任何东西:

const req=async m=>{let r=require;try{r.resolve(m)}catch(e){r('child_process').execSync('npm i '+m);await setImmediate(()=>{})}return r(m)}

const main = async () => {
  const http    = await req('http')
  const path    = await req('path')
  const fs      = await req('fs')
  const express = await req('express')

  // The rest of the app's code goes here
}

main()


文章来源: Possible to install all missing modules for a node application?
标签: node.js npm