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的方式
- 将下面的xreplace为NPM名称
- 将下面的文件放在/ meteor-project-root / packages / x /
- meteor增加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"]); });
注意:有些软件包只能在客户端或服务器上运行,如果遇到问题,请尝试只包含您要使用的端口。
我一直在使用梦幻般的“浏览”,这就像一个魅力。 这是使用Arunda 的NPM Atmosphere软件包或使用package.js的Npm.require的替代方法,这可以说有一些优点:
- 我的代码可以使用普通的“require”而不是Npm.require或Meteor.require。 显然这不是一个大问题,但是如果我想在meteor之外使用这个代码,很高兴感觉它不依赖meteor。
- 我不必担心Meteor是否会再次改变它对Npm整合的看法。
- 它允许我使用npm链接来使用我自己的npm模块的本地开发版本。
这是如何工作的:
- 我为隐藏的.npm文件夹中的npm依赖项创build了一个单独的项目
- 我使用browserify来创build一个bundle.js,它将被meteor加载
- 我使用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或新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...
您可以使用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时节点模块被打包了。