Ernst Robert
Ernst Robert

Reputation: 2236

NPM errors and control in Azure Websites

I want to build my Node.JS application in a Azure Website.
There will be an usage of different NPM packages via my packages.json file.
My problem is that I often receive error messages which are related to missing NPM files.

Normally I put my files via FTP or edit them per VS Studio 15 Azure plugin directly on the server. This may be the reason why NPM isn't triggering as Microsoft intended it.

I would prefer a way in which I can just run commands with elevated privileges to have full control over NPM by myself. Which ways are possible to avaid these problems?

Upvotes: 0

Views: 141

Answers (2)

JuanK
JuanK

Reputation: 2094

If you're publishing your nodeJS application 'manually' via FTP there are little concerns about that.

First of All, 'manually' means manually.

Git

If you use continuous deployment via Git the final deployment step is to call npm install in your current application folder, this will install all the packages listed in package.json file.

The node_modules folder is excluded by default in .gitignore file, so all packages are downloaded by the server

Web deployment

If you're using web deployment from visual studio or command line, all the files contained by your solution are copied to Hosting environment including node_modules folder , because of this the deployment would take a long time to finish due the huge amount of dependencies and files that the folder contains.

Even worst: this scenario could take you to the same scenario you're facing right now.

FTP deployment

You're copying everything yourself. So the same thing occurs in Web Deployment is happen in FTP deployment method.

-- The thing is that when you copy all those node_modules folder contents you're assuming that those dependencies remains the same in the target enviroment, most of the cases that's true, but not always.

Some dependencies are platform dependent so maybe in you're dev environment a dependency works ok in x86 architectures but what if your target machine or website (or some mix between them) is x64 (real case I already suffer it).

Other related issues could happen. May be your direct dependencies doesn't have the problem but the linked dependencies to them could have it.

So always is strongly recommended to run npm install in your target environment and avoid to copy the dependencies directly from your dev environment.

In that way you need to copy on your target environment the folder structure excluding node_modules folder. And then when files are copied you need to run npm install on the server.

To achieve that you could go to

yoursitename.scm.azurewebsites.net

There you can goto "Debug Console" Tab, then goto this directory D:\home\site\wwwroot> and run

npm install

After that the packages and dependencies are downloaded for the server/website architecture.

Hope this helps.

Azure tweak the Kudu output settings, in local Kudu implementations looks the output is normalized.

A workaround -non perfect- could be this

npm install --dd

Or even more detailed

npm install --ddd

Upvotes: 2

Ernst Robert
Ernst Robert

Reputation: 2236

The most related answer from Microsoft itself is this
Using Node.js Modules with Azure applications

Regarding control via a console with elevated privileges there is the way of using the Kudu console. But the error output is quite weird. It's kind of putting blindly commands in the console without much feedback.

Maybe this is a way to go. But I didn't tried this yet.

Regarding deployment it looks like that Azure wants you to prefer Continuous Deployment.
The suggested way is this here.

Upvotes: 1

Related Questions