2013年meteorNPM套餐

更新 这个解决scheme描述了如何在Meteor中有效地使用新的Npm系统。


目前在meteor中使用NPM包的方法是什么?

截至2013年3月22日,这方面没有官方文件。

有几个关于这个的问题,特别是这个 ,但是解决scheme看起来已经过时了:引擎分支不再存在,我在Meteor的Npm.require上找不到任何东西。

这里发布的另一个解决scheme指示安装到.meteor/ build文件夹中。 当我安装到Heroku时,这看起来不是一个有效的解决scheme,因为buildpack在运行之前使用meteor bundle来捆绑程序。 因此,临时构build文件夹似乎不是一个有效的选项。

meteor的Npm发生了什么? 使用Npm软件包的最新方法是什么?

在相关说明中,我正在尝试使用Amazon SDK(对于s3) – 将它作为Meteorite包装来包装会更好吗?

Arunoda 创build了一个NPM Atmosphere软件包 ,允许您使用任何与您习惯的NPM模块。 这很简单。

首先, mrt add npm

您也可以使用npm install -g meteor-npm meteor-npm命令安装软件包。

接下来,在你的根项目目录中创build一个packages.json文件,包名和版本:

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

最后,将它们与Meteor.require一起使用,如下所示: var FooBar = Meteor.require('foobar');

目前在meteor中使用NPMs的方式

  1. 将下面的xreplace为NPM名称
  2. 将下面的文件放在/ meteor-project-root / packages / x /
  3. meteor增加x
  4. 要使用它,只需在代码中调用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"]); }); 

注意:有些软件包只能在客户端或服务器上运行,如果遇到问题,请尝试只包含您要使用的端口。

我一直在使用梦幻般的“浏览”,这就像一个魅力。 这是使用Arunda 的NPM Atmosphere软件包或使用package.js的Npm.require的替代方法,这可以说有一些优点:

  1. 我的代码可以使用普通的“require”而不是Npm.require或Meteor.require。 显然这不是一个大问题,但是如果我想在meteor之外使用这个代码,很高兴感觉它不依赖meteor。
  2. 我不必担心Meteor是否会再次改变它对Npm整合的看法。
  3. 它允许我使用npm链接来使用我自己的npm模块的本地开发版本。

这是如何工作的:

  1. 我为隐藏的.npm文件夹中的npm依赖项创build了一个单独的项目
  2. 我使用browserify来创build一个bundle.js,它将被meteor加载
  3. 我使用grunt watch来确保每次我安装一个新的npm包时,bundle.js都会被更新

这是我的目录结构:

 my_meteor_project/ lib/ bundle.js .npm/ node_modules README.md Gruntfile.js entrypoint.js package.json 

这里有一个entrypoint.js的例子(不幸的是我必须使用全局variables,以便Meteor代码中可以使用assert,url和_)

 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或新NP​​M安装的更改

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

您可以使用https://atmospherejs.com/meteorhacks/npm

 meteor add meteorhacks:npm 

然后你可以设置你的package.json文件:

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

并使用这些包:

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

当你使用陨石时,当你安装一个节点模块到.meteor/local/build/server/你实际安装到

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

当您使用mrt bundle来创build您的部署捆绑软件时,附加软件包也会捆绑在一起。

我没有在Heroku上试过,但是我检查了使用mrt bundle时节点模块被打包了。