2013-03-23 238 views
21

更新this solution描述如何有效地使用流星中新的Npm系统。2013流星NPM软件包


什么是流星使用NPM包电流的方法?

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

大约有这几个问题,特别是this one,不过解决方案似乎已经过时:发动机分公司已不存在了,我一直没能在流星上找到Npm.require什么。

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

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

在相关说明中,我正在尝试使用Amazon SDK(适用于s3) - 将其作为Meteorite软件包进行打包会更好吗?

+0

这可能是您的最佳选择:http://www.youtube.com/watch?v=kA-QB9rQCq8&feature=youtu.be其已经在流星的devel的分支,如果你使用的陨石,你可以使用它与ITLL达流星 – Akshat 2013-03-23 05:29:24

+0

顺便说一句发动机分公司与分公司devel软件包的下一个版本,在过去2周 – Akshat 2013-03-23 07:51:36

+0

@Akshat是已经合并为一段有这个工作的devel的稳定版本? – 2013-03-24 02:06:48

回答

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

有一天看到了,辉煌。 – 2013-06-19 00:05:32

+1

花了很长时间才找到这个,但这种方法做到了诀窍......谢谢! – JohnJ 2013-08-26 22:58:33

+0

它的工作原理很好,但不在代理之后。 – lsborg 2014-08-06 17:22:40

-1

如您使用的陨石,当你安装一个节点模块.meteor/local/build/server/你实际上当您使用mrt bundle创建部署包安装到

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

,附加软件包捆绑获得,以及。

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

+0

这不会起作用,因为Heroku的捆绑服务器端 – 2013-03-24 20:16:56

9

使用的NPM流星

  1. 替换下面的NPM名
  2. 将文件放在下面勾勒出/流星项目根/包/ X/
  3. 流星X的目前方式添加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"]); 
}); 

注:有些包只能在客户端或服务器的工作,如果您有问题,请尝试只包括你要的侧使用它。

+0

你并不需要放置在'/流星项目根文件/',流星自动取指所需的软件包。 – 2013-05-30 21:23:14

+0

为了澄清,放置在步骤 – Pent 2013-05-31 00:44:02

+0

中概述的两个文件啊,我明白了。问题是,如果你把这个github给某个人,它将无法工作(协作)。做的最好的事情是把它包起来,并将其发布到大气中,这是很容易和快速,你给包 – 2013-05-31 04:30:02

3

奇妙的“browserify”,其作品像一个魅力。这是使用Arunda's NPM Atmosphere package,或using Npm.require with package.js替代,即可以说具有一定的优势:

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

下面是它如何工作的:

  1. 我在一个隐藏文件夹.npm
  2. 我用browserify创建将被流星
  3. 加载的bundle.js创建NPM依赖一个单独的项目
  4. 我用咕噜手表,以确保每次我安装一个新的NPM包,bundle.js更新

这里是我的目录结构:

my_meteor_project/ 
    lib/ 
     bundle.js 

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

这里的entrypoint.js的例子(不幸的是我必须使用全局变量,这样断言,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手表来观察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 
[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... 
+0

感谢您的信息。似乎有点复杂,但感谢您添加信息。我建议你注册堆栈溢出! – 2013-07-12 01:37:50

+0

嗨,我遵循你的指示,并咕噜生成我的bundle.js文件。但是我很困惑,现在我在lib文件夹中有bundle.js文件后,如何在我的Meteor项目中实际使用节点模块? – nearpoint 2014-06-11 02:05:13

+0

啊,我刚刚读到,你必须让它们成为全局变量,而不是我以前的问题。一切都很好!全局部分是唯一的缺点,但嘿,我会接受它。因此,使用mrt添加npm,我可以在后端使用npm包,并使用browserify(您的解决方案),我可以在前端使用npm包。这太棒了!谢谢!!! – nearpoint 2014-06-11 02:34:35

1

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

meteor add meteorhacks:npm 

然后你可以设置你的包。JSON文件:

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

,并使用这些包:

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

我相信这是一个很好的服务器解决方案,但它不会让你访问客户端上的npm模块。 – joeytwiddle 2015-09-30 11:35:21