Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Run npm with QProcess under MacOs(osx)
Forum Updated to NodeBB v4.3 + New Features

Run npm with QProcess under MacOs(osx)

Scheduled Pinned Locked Moved Unsolved General and Desktop
14 Posts 3 Posters 936 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • D Dannick Stark

    @jsulm I try it. With this, the Process is able to recognize npm but not the commands that npm will call.

    I get as error: node command not found

    jsulmJ Offline
    jsulmJ Offline
    jsulm
    Lifetime Qt Champion
    wrote on last edited by
    #5

    @Dannick-Stark What is content of m_command? And what is its type?

    https://forum.qt.io/topic/113070/qt-code-of-conduct

    1 Reply Last reply
    0
    • C ChrisW67

      Probably the system path that your program has started with, and that sh inherits, does not contain the command npm.
      You can check the default environment by looking at QProcessEnvironment::systemEnvironment().toStringList().
      You can use the absolute path to npm or insert a suitable PATH through QProcess::setProcessEnvironment().

      D Offline
      D Offline
      Dannick Stark
      wrote on last edited by Dannick Stark
      #6

      @ChrisW67 I looked at what was in QProcessEnvironment::systemEnvironment().toStringList(). And indeed npm was not there.
      So I added it with:

      AtTerminal::AtTerminal()
      {
          QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
          env.insert("npm", "/usr/local/bin/npm");
          env.insert("pnpm", "/usr/local/bin/pnpm");
          m_process->setProcessEnvironment(env);
      }
      

      I add the PATH in the constructor of my class. But it had no effect.

      @jsulm in m_command there ist: npm install i also try to use /usr/local/bin/npm install

      jsulmJ 1 Reply Last reply
      0
      • D Dannick Stark

        @ChrisW67 I looked at what was in QProcessEnvironment::systemEnvironment().toStringList(). And indeed npm was not there.
        So I added it with:

        AtTerminal::AtTerminal()
        {
            QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
            env.insert("npm", "/usr/local/bin/npm");
            env.insert("pnpm", "/usr/local/bin/pnpm");
            m_process->setProcessEnvironment(env);
        }
        

        I add the PATH in the constructor of my class. But it had no effect.

        @jsulm in m_command there ist: npm install i also try to use /usr/local/bin/npm install

        jsulmJ Offline
        jsulmJ Offline
        jsulm
        Lifetime Qt Champion
        wrote on last edited by
        #7

        @Dannick-Stark said in Run npm with QProcess under MacOs(osx):

        in m_command there ist: npm install i also try to use /usr/local/bin/npm install

        As one string? QProcess parameters need to be a QStringList, all of them:

        QStringList m_command << "npm" << "install";
        

        That's why I asked what the type is.

        https://forum.qt.io/topic/113070/qt-code-of-conduct

        D 1 Reply Last reply
        0
        • jsulmJ jsulm

          @Dannick-Stark said in Run npm with QProcess under MacOs(osx):

          in m_command there ist: npm install i also try to use /usr/local/bin/npm install

          As one string? QProcess parameters need to be a QStringList, all of them:

          QStringList m_command << "npm" << "install";
          

          That's why I asked what the type is.

          D Offline
          D Offline
          Dannick Stark
          wrote on last edited by Dannick Stark
          #8

          @jsulm yes as one string.
          I pass the command to A QStringList

          m_process -> setArguments( QStringList() << "-c" << m_command);
          

          It works well on Windows.

          jsulmJ 1 Reply Last reply
          0
          • D Dannick Stark

            @jsulm yes as one string.
            I pass the command to A QStringList

            m_process -> setArguments( QStringList() << "-c" << m_command);
            

            It works well on Windows.

            jsulmJ Offline
            jsulmJ Offline
            jsulm
            Lifetime Qt Champion
            wrote on last edited by
            #9

            @Dannick-Stark Please pass it as QStringList. It is also described in QProcess documentation.

            https://forum.qt.io/topic/113070/qt-code-of-conduct

            1 Reply Last reply
            0
            • D Offline
              D Offline
              Dannick Stark
              wrote on last edited by Dannick Stark
              #10

              In my code above, you can see that I pass the command to a QStringList.

              void AtTerminal::lunch()
              {
                  if(QSysInfo::productType() == "windows"){
                      m_process->setProgram("cmd");
                      m_process -> setArguments( QStringList() << "/C" << m_command );
                  }else if (QSysInfo::productType() == "osx") {
                      m_process->setProgram("sh");
                      m_process -> setArguments( QStringList() << "-c" << m_command);
                  }else {
                      m_process->setProgram("sh");
                      m_process -> setArguments( QStringList() << "-c" << m_command );
                  }
                  m_process->startDetached();
                  m_process->close();
              }
              
              jsulmJ 1 Reply Last reply
              0
              • D Dannick Stark

                In my code above, you can see that I pass the command to a QStringList.

                void AtTerminal::lunch()
                {
                    if(QSysInfo::productType() == "windows"){
                        m_process->setProgram("cmd");
                        m_process -> setArguments( QStringList() << "/C" << m_command );
                    }else if (QSysInfo::productType() == "osx") {
                        m_process->setProgram("sh");
                        m_process -> setArguments( QStringList() << "-c" << m_command);
                    }else {
                        m_process->setProgram("sh");
                        m_process -> setArguments( QStringList() << "-c" << m_command );
                    }
                    m_process->startDetached();
                    m_process->close();
                }
                
                jsulmJ Offline
                jsulmJ Offline
                jsulm
                Lifetime Qt Champion
                wrote on last edited by jsulm
                #11

                @Dannick-Stark Again: ALL parameters should be passed as QStringList.
                You said that m_command is a QString containing "npm install", so it basically contains TWO parameters!
                It should be like this:

                m_process -> setArguments( QStringList() << "-c" << "npm" << "install");
                

                Also, do you really need to start a shell? Can't you call npm directly without sh?

                https://forum.qt.io/topic/113070/qt-code-of-conduct

                1 Reply Last reply
                0
                • D Offline
                  D Offline
                  Dannick Stark
                  wrote on last edited by
                  #12

                  If it is possible to run npm directly without using sh that would be great.
                  But so far I haven't found a way to do it.

                  jsulmJ 2 Replies Last reply
                  0
                  • D Dannick Stark

                    If it is possible to run npm directly without using sh that would be great.
                    But so far I haven't found a way to do it.

                    jsulmJ Offline
                    jsulmJ Offline
                    jsulm
                    Lifetime Qt Champion
                    wrote on last edited by
                    #13

                    @Dannick-Stark said in Run npm with QProcess under MacOs(osx):

                    But so far I haven't found a way to do it.

                    Simply use npm as command to execute:

                    m_process->setProgram("npm");
                    m_process -> setArguments( QStringList() << "install");
                    

                    https://forum.qt.io/topic/113070/qt-code-of-conduct

                    1 Reply Last reply
                    2
                    • D Dannick Stark

                      If it is possible to run npm directly without using sh that would be great.
                      But so far I haven't found a way to do it.

                      jsulmJ Offline
                      jsulmJ Offline
                      jsulm
                      Lifetime Qt Champion
                      wrote on last edited by
                      #14

                      @Dannick-Stark One correction to what I wrote before (thanks @JonB for the hint): if you use "sh -c" then on Linux you have to pass everything after -c as ONE string!

                      https://forum.qt.io/topic/113070/qt-code-of-conduct

                      1 Reply Last reply
                      1

                      • Login

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • Users
                      • Groups
                      • Search
                      • Get Qt Extensions
                      • Unsolved