2013 Meteor NPM Packages

Обновить это решение описывает, как эффективно использовать новую систему Npm в Meteor.


Каков текущий метод использования пакетов NPM в Meteor?

По состоянию на 22 марта 2013 года официальной документации по этому вопросу нет.

Есть несколько вопросов об этом, особенно этот, однако решение кажется устаревшим: ветвь движка больше не существует, и я не смог найти ничего на Npm.require в Метеор.

Другое решение, размещенное здесь, дает инструкции по установке в папки .meteor/. Поскольку я устанавливаю в Heroku, это не похоже на правильное решение, так как buildpack использует meteor bundle для объединения программы перед ее запуском. Таким образом, временные папки создания не выглядят как допустимый вариант.

Что случилось с Npm в метеор? Какой последний способ использования пакетов Npm?

В соответствующей заметке я пытаюсь использовать SDK Amazon (для s3) - было бы лучше просто упаковать его как пакет Meteorite?

Ответ 1

Arunoda создал пакет NPM Atmosphere, который позволяет вам использовать любой модуль NPM, как вы привыкли. Это очень просто.

Сначала mrt add npm.

Вы также можете установить пакет с помощью команды meteor-npm из npm install -g meteor-npm.

Затем создайте файл packages.json в корневом каталоге проекта с именами и версиями пакетов:

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

Наконец, используйте их с Meteor.require, например: var FooBar = Meteor.require('foobar');

Ответ 2

Текущий способ использования NPM в Meteor

  • Замените x ниже именем NPM
  • Поместите контуры файлов ниже в /meteor -project-root/packages/x/
  • Метеор добавить x
  • Чтобы использовать его, просто вызовите X в свой код (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"]);
});

Примечание. Некоторые пакеты будут работать только на клиенте или сервере, если у вас возникли проблемы, попробуйте включить только ту сторону, в которой вы собираетесь ее использовать.

Ответ 3

Я использую фантастический " browserify", который работает как шарм. Это альтернатива использованию Arunda NPM Atmosphere package или с использованием Npm.require с package.js, который, возможно, имеет некоторые преимущества:

  • Мой код может использовать простой старый "require" вместо Npm.require или Meteor.require. Очевидно, это не огромная сделка, но если я хочу использовать этот код вне Meteor, то приятно чувствовать, что он не зависит от Meteor.
  • Мне не нужно беспокоиться о том, будет ли Метеор еще раз изменить то, как он думает о интеграции в Npm снова.
  • Это позволяет мне использовать локальную версию для разработки моих собственных модулей npm с использованием ссылки npm.

Вот как это работает:

  • Я создаю отдельный проект для зависимостей npm в скрытой папке .npm
  • Я использую браузер, чтобы создать пакет bundle.js, который будет загружен метеоритом
  • Я использую gunt watch, чтобы убедиться, что каждый раз, когда я устанавливаю новый пакет npm, обновляется bundle.js

Здесь моя структура каталогов:

my_meteor_project/
    lib/
        bundle.js

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

Вот пример entrypoint.js(к сожалению, мне нужно использовать глобальные переменные, чтобы в коде Meteor были доступны assert, url и _)

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

Здесь файл grunt:

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']);
};

Затем я использую часы grunt для просмотра изменений в entry.js или новых установках NPM

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

И если я установил модуль npm или изменил entrypoint.js, обновится bundle.js:

$ 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...

Ответ 4

Вы можете использовать https://atmospherejs.com/meteorhacks/npm

meteor add meteorhacks:npm

И затем вы можете настроить файл package.json:

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

И используйте эти пакеты:

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

Ответ 5

когда вы используете метеорит, когда вы устанавливаете модуль node в .meteor/local/build/server/, который вы фактически устанавливаете на

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

когда вы используете mrt bundle для создания своего пакета развертывания, дополнительные пакеты также входят в комплект.

Я не пробовал это на Heroku, но я проверил, что модуль node упаковывается при использовании пакета mrt.