更新 this solution介绍了如何在Meteor中有效使用新的Npm系统。
目前在Meteor中使用NPM包的方法是什么?
截至2013年3月22日,没有关于此的官方文档。
有几个问题,特别是this one,但解决方案似乎已经过时了:引擎分支已不存在,而且我无法在Meteor中的Npm.require
找到任何内容。
另一个解决方案posted here指示安装到.meteor/
构建文件夹中。当我安装到Heroku时,这似乎不是一个有效的解决方案,因为buildpack在运行之前使用meteor bundle
捆绑程序。因此,临时构建文件夹似乎不是一个有效的选项。
流星中的Npm发生了什么?什么是使用Npm包的最新方式?
在相关的说明中,我正在尝试使用亚马逊SDK(针对s3) - 将其打包为陨石包会更好吗?
答案 0 :(得分:22)
Arunoda拥有created an NPM Atmosphere package,允许您像以前一样使用任何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');
答案 1 :(得分:9)
目前在Meteor中使用NPM的方法
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"]);
});
注意:某些软件包只能在客户端或服务器上运行,如果遇到问题,请尝试仅包含您要使用它的一方。
答案 2 :(得分:3)
我一直在使用梦幻般的“browserify”,它就像一个魅力。这是使用Arunda's NPM Atmosphere package或using Npm.require with package.js的替代方案,可以说有一些优势:
以下是它的工作原理:
这是我的目录结构:
my_meteor_project/
lib/
bundle.js
.npm/
node_modules
README.md
Gruntfile.js
entrypoint.js
package.json
这是一个entrypoint.js的例子(遗憾的是我必须使用全局变量,以便断言,url和_在Meteor代码中可用)
assert = require('assert');
url = require("url");
_ = require('underscore');
这是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']);
};
然后我使用grunt watch来监视对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
url@0.7.9 node_modules/url
├── querystring@0.1.0
└── punycode@1.0.0
$ 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...
答案 3 :(得分:1)
您可以使用https://atmospherejs.com/meteorhacks/npm
meteor add meteorhacks:npm
然后你可以设置你的package.json文件:
{
"redis": "0.8.2",
"github": "0.1.8"
}
并使用这些包:
var GithubApi = Meteor.npmRequire('github');
答案 4 :(得分:-1)
当您使用陨石时,将节点模块安装到实际安装到.meteor/local/build/server/
的{{1}}
~/.meteorite/meteors/meteor/meteor/f07715dc70de16a7aab84e56ab0c6cbd9c1f9dc6/dev_bundle/lib/node_modules
当您使用mrt bundle
创建部署捆绑包时,其他捆绑包也会捆绑在一起。
我没有在Heroku上尝试过,但我检查过使用mrt bundle时节点模块是否打包了。