{"id":2004,"date":"2018-08-06T23:42:44","date_gmt":"2018-08-06T21:42:44","guid":{"rendered":"https:\/\/vielhuber.de\/?p=2004"},"modified":"2019-07-10T22:55:56","modified_gmt":"2019-07-10T20:55:56","slug":"node-js-npm-composer-ohne-root","status":"publish","type":"post","link":"https:\/\/vielhuber.de\/blog\/node-js-npm-composer-ohne-root\/","title":{"rendered":"Node.js \/ npm \/ Composer ohne Root"},"content":{"rendered":"\n<p>In einem \u00e4lteren <a href=\"https:\/\/vielhuber.de\/blog\/kostenloses-node-js-hosting-mit-heroku\/\">Blogbeitrag<\/a> habe ich beschrieben, wie man Node.js kostenlos mit Hilfe von <a href=\"https:\/\/www.heroku.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Heroku<\/a> hosten kann. Nun zeige ich einen Weg, wie man <a href=\"https:\/\/nodejs.org\/en\/\" target=\"_blank\" rel=\"noopener noreferrer\">Node.js<\/a>, <a href=\"https:\/\/docs.npmjs.com\/cli\/npm\" target=\"_blank\" rel=\"noopener noreferrer\">npm<\/a> und <a href=\"https:\/\/getcomposer.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Composer<\/a> auch auf beliebigen anderen Shared Hostern ohne Root-Rechte mit wenigen Zeilen Code installieren kann. Damit kann man Packages installieren, Vue.js Applikationen deployen oder einfach nur einen Express.js Server starten. Wir arbeiten dabei stets im Benutzerverzeichnis und nutzen <a href=\"https:\/\/github.com\/creationix\/nvm\" target=\"_blank\" rel=\"noreferrer noopener\">nvm<\/a>&nbsp;\u2013 den Node Package Manager.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Wichtig dabei ist vorher sicherzustellen, dass composer und node nicht vorliegen und die folgenden Zeilen keine Ausgabe erzeugen:<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"1.sh\">16c389ff1cdd9380cc5f9244775eb6c8<\/p>\n\n\n\n<p>Zun\u00e4chst legen wir tempor\u00e4re Umgebungsvariablen fest, die wir sp\u00e4ter brauchen. Dazu bestimmen wir Benutzerverzeichnis des Users (\u00fcblicherweise ~\/, auf einigen Shared Hosts auch&nbsp;\/www\/htdocs\/xxxxxxx\/) sowie die gew\u00fcnschte&nbsp;PHP-Version (beispielsweise beim Anbieter <a href=\"https:\/\/all-inkl.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">All-Inkl<\/a> \/usr\/bin\/php72, bei <a href=\"https:\/\/www.df.eu\/\" target=\"_blank\" rel=\"noopener noreferrer\">DomainFactory<\/a> \/usr\/local\/bin\/php7-72LATEST-CLI):<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"2.sh\">16c389ff1cdd9380cc5f9244775eb6c8<\/p>\n\n\n\n<p>Nun sorgen wir daf\u00fcr, dass PHP in der neuesten Version auf der Console ausgef\u00fchrt wird. Dazu legen wir im Home-Verzeichnis einen neuen Ordner an, erstellen einen Softlink und f\u00fcgen das Verzeichnis am Anfang des PATHs hinzu.<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"3.sh\">16c389ff1cdd9380cc5f9244775eb6c8<\/p>\n\n\n\n<p>Nun installieren wir global Composer, indem wir das Installationsscript downloaden, \u00fcberpr\u00fcfen und ausf\u00fchren, anschlie\u00dfend die composer.phar ebenfalls in das Benutzerverzeichnis legen und erneut einen Symlink anlegen:<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"4.sh\">16c389ff1cdd9380cc5f9244775eb6c8<\/p>\n\n\n\n<p>Zur Installation von Node.js nutzen wir nvm. Das ist ein Bash-Script, das eigentlich dazu dient, bequem zwischen Node Versionen zu wechseln. Wir nutzen hier die Eigenschaft, dass damit Node.js ohne root-Rechte installiert wird:<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"5.sh\">16c389ff1cdd9380cc5f9244775eb6c8<\/p>\n\n\n\n<p>Bei mir war noch eine kleine Korrektur in der .bashrc notwendig:<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"6.sh\">16c389ff1cdd9380cc5f9244775eb6c8<\/p>\n\n\n\n<p>Nun k\u00f6nnen wir die aktuelle Stable-Version von Node.js installieren und aktivieren:<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"7.sh\">16c389ff1cdd9380cc5f9244775eb6c8<\/p>\n\n\n\n<p>Mit Hilfe von nvm k\u00f6nnen wir damit auch ganz einfach Versionen wechseln.<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"8.sh\">16c389ff1cdd9380cc5f9244775eb6c8<\/p>\n\n\n\n<p>Ich konnte alle diese Schritte bei einigen deutschen Shared Hosting Anbietern ohne Probleme durchf\u00fchren. Einige Hoster haben mit Symlinks Probleme, hier gibt es aber auch Abhilfe durch <a href=\"https:\/\/wiki.ubuntuusers.de\/alias\/\" target=\"_blank\" rel=\"noreferrer noopener\">aliase<\/a>. Bei DomainFactory hilft beispielsweise folgende .bashrc:<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"9.sh\">16c389ff1cdd9380cc5f9244775eb6c8<\/p>\n\n\n\n<p>Auch gibt es beispielsweise beim Zugriff auf <a rel=\"noreferrer noopener\" aria-label=\"\/proc\/stat (opens in a new tab)\" href=\"http:\/\/www.linuxhowtos.org\/System\/procstat.htm\" target=\"_blank\">\/proc\/stat<\/a> in virtuellen \/ gesharten Umgebungen Probleme, weshalb beispielsweise die Node-Funktion os.cpus() undefined statt die korrekte Core-Anzahl <a rel=\"noreferrer noopener\" aria-label=\"zur\u00fcckgibt (opens in a new tab)\" href=\"https:\/\/github.com\/nodejs\/node\/issues\/19022\" target=\"_blank\">zur\u00fcckgibt<\/a>. Das f\u00fchrt bei der Installation von npm-Packages zu Fehlermeldungen wie \"Cannot read property 'length' of undefined\". Ich konnte das Problem durch Verwenden einer aktuellen Node.js-Version (beispielsweise 11.15.0) l\u00f6sen, in dem das Problem <a rel=\"noreferrer noopener\" aria-label=\"gel\u00f6st (opens in a new tab)\" href=\"https:\/\/github.com\/nodejs\/node\/commit\/51cea618e21ba88bc20feb537a72c1b831a94b46\" target=\"_blank\">adressiert<\/a> wurde.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In einem \u00e4lteren Blogbeitrag habe ich beschrieben, wie man Node.js kostenlos mit Hilfe von Heroku hosten kann. Nun zeige ich einen Weg, wie man Node.js, npm und Composer auch auf beliebigen anderen Shared Hostern ohne Root-Rechte mit wenigen Zeilen Code installieren kann. Damit kann man Packages installieren, Vue.js Applikationen deployen oder einfach nur einen Express.js [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"gtbabel_prevent_lngs":"","gtbabel_alt_lng":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-2004","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-blog"},"acf":[],"yoast_head":"<title>Node.js \/ npm \/ Composer ohne Root &#060; Vielhuber David<\/title>\n<meta name=\"description\" content=\"In einem \u00e4lteren Blogbeitrag habe ich beschrieben, wie man Node.js kostenlos mit Hilfe von Heroku hosten kann. Nun zeige ich einen Weg, wie man Node....\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vielhuber.de\/blog\/node-js-npm-composer-ohne-root\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Node.js \/ npm \/ Composer ohne Root &#060; Vielhuber David\" \/>\n<meta property=\"og:description\" content=\"In einem \u00e4lteren Blogbeitrag habe ich beschrieben, wie man Node.js kostenlos mit Hilfe von Heroku hosten kann. Nun zeige ich einen Weg, wie man Node.js,\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vielhuber.de\/blog\/node-js-npm-composer-ohne-root\/\" \/>\n<meta property=\"og:site_name\" content=\"Vielhuber David\" \/>\n<meta property=\"article:published_time\" content=\"2018-08-06T21:42:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-07-10T20:55:56+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vielhuber.de\/wp-content\/uploads\/about.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"700\" \/>\n\t<meta property=\"og:image:height\" content=\"552\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"David\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@vielhuber\" \/>\n<meta name=\"twitter:site\" content=\"@vielhuber\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"David\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"2\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/node-js-npm-composer-ohne-root\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/node-js-npm-composer-ohne-root\\\/\"},\"author\":{\"name\":\"David\",\"@id\":\"https:\\\/\\\/vielhuber.de\\\/#\\\/schema\\\/person\\\/64d4ff14713d413ea4d9b210d0c2c6ef\"},\"headline\":\"Node.js \\\/ npm \\\/ Composer ohne Root\",\"datePublished\":\"2018-08-06T21:42:44+00:00\",\"dateModified\":\"2019-07-10T20:55:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/node-js-npm-composer-ohne-root\\\/\"},\"wordCount\":451,\"publisher\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/#\\\/schema\\\/person\\\/64d4ff14713d413ea4d9b210d0c2c6ef\"},\"articleSection\":[\"Blog\"],\"inLanguage\":\"de\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/node-js-npm-composer-ohne-root\\\/\",\"url\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/node-js-npm-composer-ohne-root\\\/\",\"name\":\"Node.js \\\/ npm \\\/ Composer ohne Root &#060; Vielhuber David\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/#website\"},\"datePublished\":\"2018-08-06T21:42:44+00:00\",\"dateModified\":\"2019-07-10T20:55:56+00:00\",\"description\":\"In einem \u00e4lteren Blogbeitrag habe ich beschrieben, wie man Node.js kostenlos mit Hilfe von Heroku hosten kann. Nun zeige ich einen Weg, wie man Node.js,\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/node-js-npm-composer-ohne-root\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vielhuber.de\\\/blog\\\/node-js-npm-composer-ohne-root\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/node-js-npm-composer-ohne-root\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vielhuber.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Node.js \\\/ npm \\\/ Composer ohne Root\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vielhuber.de\\\/#website\",\"url\":\"https:\\\/\\\/vielhuber.de\\\/\",\"name\":\"Vielhuber David\",\"description\":\"Full-Stack Developer\",\"publisher\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/#\\\/schema\\\/person\\\/64d4ff14713d413ea4d9b210d0c2c6ef\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vielhuber.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/vielhuber.de\\\/#\\\/schema\\\/person\\\/64d4ff14713d413ea4d9b210d0c2c6ef\",\"name\":\"David\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/vielhuber.de\\\/wp-content\\\/uploads\\\/about.jpg\",\"url\":\"https:\\\/\\\/vielhuber.de\\\/wp-content\\\/uploads\\\/about.jpg\",\"contentUrl\":\"https:\\\/\\\/vielhuber.de\\\/wp-content\\\/uploads\\\/about.jpg\",\"width\":700,\"height\":552,\"caption\":\"David\"},\"logo\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/wp-content\\\/uploads\\\/about.jpg\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/vielhuber\"]}]}<\/script>","yoast_head_json":{"title":"Node.js \/ npm \/ Composer ohne Root &#060; Vielhuber David","description":"In einem \u00e4lteren Blogbeitrag habe ich beschrieben, wie man Node.js kostenlos mit Hilfe von Heroku hosten kann. Nun zeige ich einen Weg, wie man Node....","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vielhuber.de\/blog\/node-js-npm-composer-ohne-root\/","og_locale":"de_DE","og_type":"article","og_title":"Node.js \/ npm \/ Composer ohne Root &#060; Vielhuber David","og_description":"In einem \u00e4lteren Blogbeitrag habe ich beschrieben, wie man Node.js kostenlos mit Hilfe von Heroku hosten kann. Nun zeige ich einen Weg, wie man Node.js,","og_url":"https:\/\/vielhuber.de\/blog\/node-js-npm-composer-ohne-root\/","og_site_name":"Vielhuber David","article_published_time":"2018-08-06T21:42:44+00:00","article_modified_time":"2019-07-10T20:55:56+00:00","og_image":[{"width":700,"height":552,"url":"https:\/\/vielhuber.de\/wp-content\/uploads\/about.jpg","type":"image\/jpeg"}],"author":"David","twitter_card":"summary_large_image","twitter_creator":"@vielhuber","twitter_site":"@vielhuber","twitter_misc":{"Verfasst von":"David","Gesch\u00e4tzte Lesezeit":"2\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vielhuber.de\/blog\/node-js-npm-composer-ohne-root\/#article","isPartOf":{"@id":"https:\/\/vielhuber.de\/blog\/node-js-npm-composer-ohne-root\/"},"author":{"name":"David","@id":"https:\/\/vielhuber.de\/#\/schema\/person\/64d4ff14713d413ea4d9b210d0c2c6ef"},"headline":"Node.js \/ npm \/ Composer ohne Root","datePublished":"2018-08-06T21:42:44+00:00","dateModified":"2019-07-10T20:55:56+00:00","mainEntityOfPage":{"@id":"https:\/\/vielhuber.de\/blog\/node-js-npm-composer-ohne-root\/"},"wordCount":451,"publisher":{"@id":"https:\/\/vielhuber.de\/#\/schema\/person\/64d4ff14713d413ea4d9b210d0c2c6ef"},"articleSection":["Blog"],"inLanguage":"de"},{"@type":"WebPage","@id":"https:\/\/vielhuber.de\/blog\/node-js-npm-composer-ohne-root\/","url":"https:\/\/vielhuber.de\/blog\/node-js-npm-composer-ohne-root\/","name":"Node.js \/ npm \/ Composer ohne Root &#060; Vielhuber David","isPartOf":{"@id":"https:\/\/vielhuber.de\/#website"},"datePublished":"2018-08-06T21:42:44+00:00","dateModified":"2019-07-10T20:55:56+00:00","description":"In einem \u00e4lteren Blogbeitrag habe ich beschrieben, wie man Node.js kostenlos mit Hilfe von Heroku hosten kann. Nun zeige ich einen Weg, wie man Node.js,","breadcrumb":{"@id":"https:\/\/vielhuber.de\/blog\/node-js-npm-composer-ohne-root\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vielhuber.de\/blog\/node-js-npm-composer-ohne-root\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/vielhuber.de\/blog\/node-js-npm-composer-ohne-root\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vielhuber.de\/"},{"@type":"ListItem","position":2,"name":"Node.js \/ npm \/ Composer ohne Root"}]},{"@type":"WebSite","@id":"https:\/\/vielhuber.de\/#website","url":"https:\/\/vielhuber.de\/","name":"Vielhuber David","description":"Full-Stack Developer","publisher":{"@id":"https:\/\/vielhuber.de\/#\/schema\/person\/64d4ff14713d413ea4d9b210d0c2c6ef"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vielhuber.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":["Person","Organization"],"@id":"https:\/\/vielhuber.de\/#\/schema\/person\/64d4ff14713d413ea4d9b210d0c2c6ef","name":"David","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/vielhuber.de\/wp-content\/uploads\/about.jpg","url":"https:\/\/vielhuber.de\/wp-content\/uploads\/about.jpg","contentUrl":"https:\/\/vielhuber.de\/wp-content\/uploads\/about.jpg","width":700,"height":552,"caption":"David"},"logo":{"@id":"https:\/\/vielhuber.de\/wp-content\/uploads\/about.jpg"},"sameAs":["https:\/\/x.com\/vielhuber"]}]}},"_links":{"self":[{"href":"https:\/\/vielhuber.de\/hi\/wp-json\/wp\/v2\/posts\/2004","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vielhuber.de\/hi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vielhuber.de\/hi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vielhuber.de\/hi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vielhuber.de\/hi\/wp-json\/wp\/v2\/comments?post=2004"}],"version-history":[{"count":20,"href":"https:\/\/vielhuber.de\/hi\/wp-json\/wp\/v2\/posts\/2004\/revisions"}],"predecessor-version":[{"id":2397,"href":"https:\/\/vielhuber.de\/hi\/wp-json\/wp\/v2\/posts\/2004\/revisions\/2397"}],"wp:attachment":[{"href":"https:\/\/vielhuber.de\/hi\/wp-json\/wp\/v2\/media?parent=2004"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vielhuber.de\/hi\/wp-json\/wp\/v2\/categories?post=2004"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vielhuber.de\/hi\/wp-json\/wp\/v2\/tags?post=2004"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}