【问题标题】:Meteor npm run script on server restartMeteor npm 在服务器重启时运行脚本
【发布时间】:2018-06-26 04:57:38
【问题描述】:

有没有办法在每次 Meteor 服务器重启时运行 npm 脚本?

我尝试了postinstall 钩子,但它只在第一次本地应用程序启动时运行。

我认为,一定有办法,因为重新启动会触发多个构建过程,其中一些必须是“可挂钩的”。

我最初考虑使用build plugins,但似乎他们从我的package.json 中移走了很多配置。

有人知道吗?

【问题讨论】:

    标签: meteor npm


    【解决方案1】:

    您可以在服务器端的 Meteor.startup() 代码中运行您的 npm 脚本。以下应位于/server 文件夹下的示例可能会有所帮助。

    import { exec } from 'child_process';
    
    Meteor.startup(() => {
       async function sh(cmd) {
         return new Promise(function (resolve, reject) {
           exec(cmd, (err, stdout, stderr) => {
             if (err) {
               reject(err);
             } else {
               resolve({ stdout, stderr });
             }
           });
         });
       }
    
       async function excScript() {
         let { stdout } = await sh('npm -ls'); // runs "npm -ls"
         for (let line of stdout.split('\n')) {
           console.log(`npm -ls: ${line}`);
         }
       } 
       excScript();
    }
    

    【讨论】:

    • 非常感谢。看来,这是朝着正确的方向发展。但是,有一些错误。首先它无法访问脚本,因为在开发中本地构建的文件夹是{projectpath}/.meteor/local/build/programs/server,其中不包含原始的package.json 文件。有没有办法将脚本称为“上面的一些目录”?第二个问题是以下错误消息:(node:56566) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
    • 你的意思是当它运行npm -ls你得到“找不到命令错误”?如果是这样,它与您的环境设置有关。您应该将“npm_bin_path”添加到生产服务器中的 PATH 变量中。与使用 Promise 相关的不是错误而是弃用警告,您可以暂时省略。
    • 谢谢。我没有在 Windows 上运行,所以没有PATHvariables。另外我只想在开发模式下使用脚本。 command not found 错误来自当前目录不是我的项目目录,而是.meteor 文件夹中的本地构建,其中带有我的脚本的package.json 不存在(因此出现错误)。关于弃用警告,我不想省略弃用的功能,因为它们被弃用是有原因的(部署具有已弃用功能的新应用程序可能不好)。有没有其他选择可以解决这个问题?最好的,简
    猜你喜欢
    • 2021-12-27
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多