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.