none
[Node.js][Web Apps] Specify NPM Version in Web App RRS feed

  • Question

  • Hello,

    I am trying to deploy a Node web app as an Azure App Service - Web App. I am trying to set the node and npm version in my package.json file, using the following:

    "engines": {
      "node": "~5.3.0",
      "npm": "3.3.12"
    }

    I then have a deploy.sh file, which looks like this:

    #!/bin/bash
    
    # ----------------------
    # KUDU Deployment Script
    # Version: 0.2.2
    # ----------------------
    
    # Helpers
    # -------
    
    exitWithMessageOnError () {
      if [ ! $? -eq 0 ]; then
        echo "An error has occurred during web site deployment."
        echo $1
        exit 1
      fi
    }
    
    # Prerequisites
    # -------------
    
    # Verify node.js installed
    hash node 2>/dev/null
    exitWithMessageOnError "Missing node.js executable, please install node.js, if already installed make sure it can be reached from current environment."
    
    # Setup
    # -----
    
    SCRIPT_DIR="${BASH_SOURCE[0]%\\*}"
    SCRIPT_DIR="${SCRIPT_DIR%/*}"
    ARTIFACTS=$SCRIPT_DIR/../artifacts
    KUDU_SYNC_CMD=${KUDU_SYNC_CMD//\"}
    
    if [[ ! -n "$DEPLOYMENT_SOURCE" ]]; then
      DEPLOYMENT_SOURCE=$SCRIPT_DIR
    fi
    
    if [[ ! -n "$NEXT_MANIFEST_PATH" ]]; then
      NEXT_MANIFEST_PATH=$ARTIFACTS/manifest
    
      if [[ ! -n "$PREVIOUS_MANIFEST_PATH" ]]; then
        PREVIOUS_MANIFEST_PATH=$NEXT_MANIFEST_PATH
      fi
    fi
    
    if [[ ! -n "$DEPLOYMENT_TARGET" ]]; then
      DEPLOYMENT_TARGET=$ARTIFACTS/wwwroot
    else
      KUDU_SERVICE=true
    fi
    
    if [[ ! -n "$KUDU_SYNC_CMD" ]]; then
      # Install kudu sync
      echo Installing Kudu Sync
      npm install kudusync -g --silent
      exitWithMessageOnError "npm failed"
    
      if [[ ! -n "$KUDU_SERVICE" ]]; then
        # In case we are running locally this is the correct location of kuduSync
        KUDU_SYNC_CMD=kuduSync
      else
        # In case we are running on kudu service this is the correct location of kuduSync
        KUDU_SYNC_CMD=$APPDATA/npm/node_modules/kuduSync/bin/kuduSync
      fi
    fi
    
    # Node Helpers
    # ------------
    
    selectNodeVersion () {
      if [[ -n "$KUDU_SELECT_NODE_VERSION_CMD" ]]; then
        SELECT_NODE_VERSION="$KUDU_SELECT_NODE_VERSION_CMD \"$DEPLOYMENT_SOURCE\" \"$DEPLOYMENT_TARGET\" \"$DEPLOYMENT_TEMP\""
        eval $SELECT_NODE_VERSION
        exitWithMessageOnError "select node version failed"
    
        echo "Using Node Version: $"
        if [[ -e "$DEPLOYMENT_TEMP/__nodeVersion.tmp" ]]; then
          NODE_EXE=`cat "$DEPLOYMENT_TEMP/__nodeVersion.tmp"`
          exitWithMessageOnError "getting node version failed"
        fi
        
        if [[ -e "$DEPLOYMENT_TEMP/.tmp" ]]; then
          NPM_JS_PATH=`cat "$DEPLOYMENT_TEMP/__npmVersion.tmp"`
          exitWithMessageOnError "getting npm version failed"
        fi
    
        if [[ ! -n "$NODE_EXE" ]]; then
          NODE_EXE=node
        fi
    
        NPM_CMD="\"$NODE_EXE\" \"$NPM_JS_PATH\""
      else
        echo "Using Default Node Version"
        NPM_CMD=npm
        NODE_EXE=node
      fi
    }
    
    ##################################################################################################################################
    # Deployment
    # ----------
    
    echo Handling node.js deployment.
    
    # 1. KuduSync
    if [[ "$IN_PLACE_DEPLOYMENT" -ne "1" ]]; then
      "$KUDU_SYNC_CMD" -v 50 -f "$DEPLOYMENT_SOURCE" -t "$DEPLOYMENT_TARGET" -n "$NEXT_MANIFEST_PATH" -p "$PREVIOUS_MANIFEST_PATH" -i ".git;.hg;.deployment;deploy.sh"
      exitWithMessageOnError "Kudu Sync failed"
    fi
    
    # 2. Select node version
    selectNodeVersion
    
    # 3. Install npm packages
    if [ -e "$DEPLOYMENT_TARGET/package.json" ]; then
      echo "Installing npm packages..."
      cd "$DEPLOYMENT_TARGET"
      eval $NPM_CMD install
      exitWithMessageOnError "npm failed"
      cd - > /dev/null
    fi
    
    ##################################################################################################################################
    
    # Post deployment stub
    if [[ -n "$POST_DEPLOYMENT_ACTION" ]]; then
      POST_DEPLOYMENT_ACTION=${POST_DEPLOYMENT_ACTION//\"}
      cd "${POST_DEPLOYMENT_ACTION_DIR%\\*}"
      "$POST_DEPLOYMENT_ACTION"
      exitWithMessageOnError "post deployment action failed"
    fi
    
    echo "Finished successfully."

    I believe i am correctly setting the node version. However, when this runs, it does not seem to set the NPM version. Yet, I'm not sure how to do that. What am I missing?



    Tuesday, March 1, 2016 12:56 PM

Answers

  • Hi Alan,

    The deploy.sh will select the node and npm version in deployment task, and which seems will not change the node or npm version in the web site environment.

    If you want to specify the npm version in the web site environment, you can try to modify the WEBSITE_NODE_DEFAULT_VERSION in the App Settings under your configure tag in the Azure manage portal.

    E.G. You can modify this setting to 5.3.0, then you can see the node version is changed to 5.3.0 and npm version is changed to 3.3.12 in the KUDU console site. 

    Refer to https://azure.microsoft.com/en-us/documentation/articles/nodejs-specify-node-version-azure-apps/ for more info.

    Any concern, please feel free to let me know.

    Wednesday, March 2, 2016 1:36 AM
    Moderator

All replies

  • Can you paste the part of the deployment log that shows what Node/npm version it is picking? There may be clues there.

    David

    Tuesday, March 1, 2016 6:15 PM
  • Also, note that 3.3.12 is the npm version that Node 5.3.0 maps to, so it should work without even specifying npm ver explicitly.
    Tuesday, March 1, 2016 6:16 PM
  • I see that in my log file that it's consistent with what you're saying. I see:

    Selected node.js version 5.3.0. Use package.json file to choose a different version.
    Selected npm version 3.3.12

    I guess I have to keep digging into my issue.

    Tuesday, March 1, 2016 9:36 PM
  • Hi Alan,

    The deploy.sh will select the node and npm version in deployment task, and which seems will not change the node or npm version in the web site environment.

    If you want to specify the npm version in the web site environment, you can try to modify the WEBSITE_NODE_DEFAULT_VERSION in the App Settings under your configure tag in the Azure manage portal.

    E.G. You can modify this setting to 5.3.0, then you can see the node version is changed to 5.3.0 and npm version is changed to 3.3.12 in the KUDU console site. 

    Refer to https://azure.microsoft.com/en-us/documentation/articles/nodejs-specify-node-version-azure-apps/ for more info.

    Any concern, please feel free to let me know.

    Wednesday, March 2, 2016 1:36 AM
    Moderator