2013-03-23 3 views
21

Updatethis solution beschreibt, wie das neue Npm-System in Meteor effektiv zu verwenden.2013 Meteor NPM Pakete


Wie ist die gegenwärtige Methode der NPM-Pakete in Meteor mit?

Seit dem 22. März 2013 gibt es keine offizielle Dokumentation zu diesem Thema.

Es gibt mehrere Fragen zu diesem Thema, insbesondere this one, aber die Lösung veraltet scheint: der Motor Zweig nicht mehr vorhanden ist, und ich habe nicht in der Lage gewesen, alles auf Npm.require in Meteor zu finden.

Eine andere Lösung, posted here, weist an, in die .meteor/ Build-Ordner zu installieren. Während ich auf Heroku installiere, scheint dies keine gültige Lösung zu sein, da das Buildpack meteor bundle verwendet, um das Programm zu bündeln, bevor es ausgeführt wird. Daher scheinen die temporären Build-Ordner keine gültige Option zu sein.

Was ist mit Npm in Meteor passiert? Was ist die neueste Art der Verwendung von Npm-Paketen?

Zu einem verwandten Hinweis, ich versuche, das Amazon SDK (für s3) zu verwenden - wäre es besser, es einfach als Meteorit-Paket zu packen?

+0

Dies könnte für Sie perfekt: http://www.youtube.com/watch?v=kA-QB9rQCq8&feature=youtu.be Seine bereits auf dem Entwick Zweig des Meteors, wenn Sie Meteoriten verwenden könnten Sie es verwenden und itll – Akshat

+0

Btw des Motor Zweig & Entwick Zweig nach oben in der nächsten Version von Meteor haben als die irgendwann in den letzten 2 Wochen verschmolzen – Akshat

+0

@Akshat ist Gibt es eine stabile Version von devel mit dieser Funktion? –

Antwort

22

Arunoda hat created an NPM Atmosphere package, mit dem Sie jedes NPM-Modul verwenden können, wie Sie es gewohnt sind. Es ist sehr einfach.

Zuerst mrt add npm.

Sie können das Paket auch mit dem Befehl meteor-npm von npm install -g meteor-npm installieren.

Als nächstes machen eine packages.json Datei in Ihrem Stammprojektverzeichnis mit den Paketnamen und Versionen:

{ 
    "foobar": "0.3.5", 
    "loremipsum": "2.1.4" 
} 

Schließlich verwenden sie mit Meteor.require, wie folgt aus: var FooBar = Meteor.require('foobar');

+1

Sah das neulich, brilliant. –

+1

Ich habe lange gebraucht, um das zu finden, aber dieser Ansatz hat es geschafft ... danke! – JohnJ

+0

Es funktioniert, gut, aber nicht hinter einem Proxy. – lsborg

-1

wie Sie Meteoriten verwenden, wenn Sie ein Knotenmodul zu .meteor/local/build/server/ installieren Sie installieren tatsächlich

~/.meteorite/meteors/meteor/meteor/f07715dc70de16a7aab84e56ab0c6cbd9c1f9dc6/dev_bundle/lib/node_modules 

wenn Sie mrt bundle verwenden Ihre Bereitstellung Bundle zu erstellen, erhalten die zusätzlichen Pakete als auch gebündelt.

Ich habe es nicht auf Heroku versucht, aber ich habe überprüft, dass das Knotenmodul verpackt wird, wenn mrt Bundle verwendet.

+0

Das wird nicht funktionieren, weil Heroku bündelt serverseitige –

9

Die aktuelle Art und Weise von NPM in Meteor

  1. Ersetzen Sie die xs unten mit dem NPM Namen
  2. Legen Sie die Dateien umreißen unten/Meteor-Projekt-root/packages/x/
  3. Meteor mit Add x
  4. es nutzen zu können, nur x nennen in Ihrem Code (X.function())

x.js --------

X = Npm.require('x'); 

package.js --------

Package.describe({ 
    summary: "Meteor smart package for x node.js package" 
}); 

Npm.depends({ 
    "x": "0.1.1" 
}); 

Package.on_use(function (api) { 
    api.add_files("x.js", ["client", "server"]); 
}); 

Hinweis: einige Pakete werden nur auf Client oder Server arbeiten, wenn Sie Probleme haben, versuchen Sie enthalten nur die Seite du gehst, um es zu benutzen.

+0

Sie müssen keine Dateien gespeichert werden in '/ Meteor-Projekt-root /', holt Meteor-Pakete automatisch erforderlich. –

+0

Um zu klären, legen Sie die beiden Dateien in den Schritten skizziert – Pent

+0

Ah, ich verstehe. Das Problem ist, wenn du es jemandem vergibst, wird es nicht funktionieren (Zusammenarbeit). Am besten ist es, es in die Atmosphäre zu packen und zu posten, was einfach und schnell ist und der gesamten Community Zugriff auf das Paket gibt. –

3

ich verwendet haben fantastisch "browserify", die wie ein Charme funktioniert. Dies ist eine Alternative zur Verwendung von Arunda's NPM Atmosphere package oder using Npm.require with package.js, dass wohl einige Vorteile hat:

  1. Mein Code verwenden kann, die guten alten „require“ statt Npm.require oder Meteor.require. Natürlich ist das keine große Sache, aber wenn ich diesen Code außerhalb von Meteor verwenden möchte, ist es schön zu fühlen, dass er nicht von Meteor abhängig ist.
  2. Ich muss mir keine Sorgen machen, ob Meteor wieder einmal die Art, wie es über die Integration von Npm denkt, ändern wird.
  3. Es ermöglicht mir, lokale Entwicklung Version meiner eigenen npm-Module mit npm Link zu verwenden.

Hier ist, wie es funktioniert:

  1. I
  2. Ich benutze browserify einen bundle.js zu erstellen, die von Meteor wird geladen
  3. ein separates Projekt für npm Abhängigkeiten in einem versteckten .npm Ordner erstellen
  4. ich grunzen Uhr, um sicherzustellen, dass jedes Mal, wenn ich ein neues npm Paket installieren, wird die bundle.js
  5. aktualisiert

Hier ist meine Verzeichnisstruktur:

my_meteor_project/ 
    lib/ 
     bundle.js 

    .npm/ 
     node_modules 
     README.md 
     Gruntfile.js 
     entrypoint.js 
     package.json 

Hier ist ein Beispiel von entrypoint.js (leider muß ich Globals verwenden, so dass die Assertion, URL, und _ sind in Meteor Code verfügbar)

assert = require('assert'); 
url = require("url"); 
_ = require('underscore'); 

Hier ist die gruntfile:

module.exports = function(grunt) { 
    grunt.initConfig({ 
    watch: { 
     build: { 
      files: ['./entrypoint.js', './package.json'], 
      tasks: ['browserify2'], 
      options: { 
      } 
     } 
    }, 
    browserify2: { 
     compile: { 
     entry: './entrypoint.js', 
     compile: '../lib/bundle.js' 
     } 
    }, 
    }); 

    grunt.loadNpmTasks('grunt-browserify2'); 
    grunt.loadNpmTasks('grunt-contrib-watch'); 
    grunt.registerTask('build', ['browserify2']); 
}; 

Ich benutze dann grunt Uhr, um auf Änderungen an entry.js oder neuen NPM-Installationen zu beobachten

$ cd .npm 
$ grunt watch:build & 
[2] 44617 
$ Running "watch:build" (watch) task 
Waiting... 

Und dann, wenn ich ein npm Modul installieren oder entrypoint.js ändern, bundle.js aktualisiert:

$ npm install url -save 
npm http GET https://registry.npmjs.org/punycode 
npm http GET https://registry.npmjs.org/querystring 
npm http 304 https://registry.npmjs.org/punycode 
npm http 304 https://registry.npmjs.org/querystring 
[email protected] node_modules/url 
├── [email protected] 
└── [email protected] 
$ OK 
>> File "package.json" changed. 

Running "browserify2:compile" (browserify2) task 
File written to: ../lib/bundle.js 

Done, without errors. 
Completed in 1.256s at Thu Jul 11 2013 11:36:22 GMT-0600 (MDT) - Waiting... 
+0

Danke für die Information. Scheint ein bisschen kompliziert, aber danke für die Info. Ich empfehle Ihnen, sich bei Stack Overflow zu registrieren! –

+0

Hallo ich folgte Ihrer Anweisung und wurde grun, um meine Bundle.js-Datei zu erstellen. Aber ich habe verwirrt, wie benutze ich eigentlich das Knotenmodul in meinem Meteorprojekt jetzt, dass ich Bundle.js-Datei im lib-Ordner habe? – nearpoint

+0

Ah ich lese gerade, dass du sie global machen musst, vergiss meine vorherige Frage. Alles funktioniert super! Der globale Teil ist der einzige Nachteil, aber hey, ich werde es nehmen. Also mit dem mrt hinzufügen npm I npm Pakete auf dem hinteren Ende und mit browserify (Ihre Lösung) verwenden kann, kann ich npm Pakete auf dem Front-End verwenden. Das ist fantastisch! VIELEN DANK!!! – nearpoint

1

können Sie verwenden https://atmospherejs.com/meteorhacks/npm

meteor add meteorhacks:npm 

Und dann können Sie Setup Ihr ​​Paket .JSON-Datei:

{ 
    "redis": "0.8.2", 
    "github": "0.1.8" 
} 

Und diese Pakete verwenden:

var GithubApi = Meteor.npmRequire('github'); 
+0

Ich glaube, das ist eine gute Lösung für den Server, aber es gibt Ihnen keinen Zugriff auf npm-Module auf dem Client. – joeytwiddle