Search code examples
node.jsnpmlaravel-mix

Run Laravel Mix without a global nodejs and npm installation


I have a laravel project and I need to build styles and scripts with laravel-mix, but a testing server (Ubuntu 20.04.4) hasn't a globally installed node. Node and npm are in different folders in the system so I run commands like this:

/path/to/node /path/to/npm install
/path/to/node /path/to/npm run dev

But when I run npm run dev (this command runs laravel-mix build), I see the error:

> [email protected] dev
> mix

/usr/bin/env: ‘node’: No such file or directory

In the package.json it looks like this:

"scripts": {
    "dev": "mix"
    ...
}

I checked the laravel-mix package (in node_modules) and found this: #!/usr/bin/env node. The package checks the node var in this file, but there is no node var.

I don't need to change the env file, so how can I change this path or set a temporary system var? Is there any way to simulate that the variable is there?


Solution

  • I resolved my issue with Docker, so now I run this command on git push: docker run --rm -v /path/to/project:/var/www/html node:16.16.0-alpine npm run dev --prefix /var/www/html

    Perhaps it will be useful to someone.

    UPD

    I found another way to resolve it, I use PATH incorrectly and for this reason it didn't work:

    Wrong

    I set paths to node and npm and then add it to PATH like this:

    NODE_PATH="/path/to/node_folder/node"
    NPM_PATH="/path/to/node_folder/npm"
    
    PATH="${NODE_PATH}:${NPM_PATH}:$PATH"
    

    And the system can't find npm and node anyway.

    The right way

    Add /path/to/node_folders (node and npm are in it) to PATH:

    NODE_DIR="/path/to/node_folder"
    
    PATH="${NODE_DIR}:$PATH"
    

    And then, I can run just npm install and npm run dev without full paths to them.