2013 Meteor NPM 包
Posted
技术标签:
【中文标题】2013 Meteor NPM 包【英文标题】:2013 Meteor NPM Packages 【发布时间】:2013-03-13 01:59:02 【问题描述】:更新this solution 描述了如何在 Meteor 中有效地使用新的 Npm 系统。
目前在 Meteor 中使用 NPM 包的方法是什么?
截至 2013 年 3 月 22 日,没有关于此的官方文档。
对此有几个问题,特别是this one,但解决方案似乎已经过时:引擎分支不再存在,我无法在 Meteor 的Npm.require
上找到任何内容。
另一个解决方案posted here 指示安装到.meteor/
构建文件夹中。当我安装到 Heroku 时,这似乎不是一个有效的解决方案,因为 buildpack 在运行之前使用meteor bundle
捆绑程序。因此,临时构建文件夹似乎不是一个有效的选项。
流星中的 Npm 发生了什么?使用 Npm 包的最新方法是什么?
在相关说明中,我正在尝试使用 Amazon SDK(用于 s3) - 将其打包为 Meteorite 包会更好吗?
【问题讨论】:
这对你来说可能是完美的:youtube.com/watch?v=kA-QB9rQCq8&feature=youtu.be 如果你正在使用陨石,它已经在流星的开发分支上,你可以使用它,它会在流星的下一个版本中使用 顺便说一句,引擎分支和开发分支已在过去 2 周的某个时间合并 @Akshat 是否有稳定版本的 devel 可以正常工作? @Akshat 我发现了这个:github.com/possibilities/meteor-awssum - 现在应该做我需要做的事情 How do we or can we use node modules via npm with Meteor?的可能重复 【参考方案1】:Arunoda 有 created an NPM Atmosphere package,它允许您像以前一样使用任何 NPM 模块。很简单。
首先,mrt add npm
。
您也可以使用来自npm install -g meteor-npm
的meteor-npm
命令安装该软件包。
接下来,在您的项目根目录中创建一个packages.json
文件,其中包含包名称和版本:
"foobar": "0.3.5",
"loremipsum": "2.1.4"
最后,将它们与Meteor.require
一起使用,如下所示:var FooBar = Meteor.require('foobar');
【讨论】:
前几天看到这个,太棒了。 我花了很长时间才找到这个,但这种方法成功了......谢谢! Meteor.require 应该放在哪里?【参考方案2】:目前在 Meteor 中使用 NPM 的方式
-
将下面的 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"]);
);
注意:有些软件包只能在客户端或服务器上运行,如果您遇到问题,请尝试仅包含您要使用它的一侧。
【讨论】:
/meteor-project-root/
不需要放文件,Meteor会自动获取需要的包。
为了澄清,将步骤中列出的两个文件放置
啊,我明白了。问题是,如果您将其 github 发送给某人,它将无法正常工作(合作)。最好的办法是将其打包并发布到大气中,这既简单又快捷,并且您可以让整个社区都可以访问该包
如果它包含在 github 流星项目中并且有人克隆它以供本地使用,这肯定会正常工作。 Meteor 将自动获取包,因为它们将包含在 .meteor/packages
我的错,我以为您的意思是在您的计算机上安装流星。部署呢?这也一样吗?【参考方案3】:
我一直在使用奇妙的“browserify”,它就像一个魅力。这是使用 Arunda's NPM Atmosphere package 或 using Npm.require with package.js 的替代方法,可以说具有一些优势:
-
我的代码可以使用普通的旧“require”而不是 Npm.require 或 Meteor.require。显然这没什么大不了的,但如果我想在 Meteor 之外使用这段代码,感觉它不依赖于 Meteor 是件好事。
我不必担心 Meteor 是否会再次改变它对 Npm 集成的看法。
它允许我通过 npm 链接使用我自己的 npm 模块的本地开发版本。
它是这样工作的:
-
我在隐藏的 .npm 文件夹中为 npm 依赖项创建了一个单独的项目
我使用 browserify 创建了一个 bundle.js 将被流星加载
我使用 grunt 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');
这是 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...
【讨论】:
感谢您的信息。似乎有点复杂,但感谢您添加信息。我建议你在 Stack Overflow 上注册! 您好,我按照您的指示开始构建我的 bundle.js 文件。但是我很困惑,既然我在 lib 文件夹中有 bundle.js 文件,我该如何在我的流星项目中实际使用节点模块? 啊,我刚刚读到您必须将它们设为全局,别管我之前的问题。一切都很好!全局部分是唯一的缺点,但嘿,我会接受的。因此,使用 mrt add npm 我可以在后端使用 npm 包,使用 browserify(您的解决方案)我可以在前端使用 npm 包。这太棒了!谢谢!!!【参考方案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');
【讨论】:
我相信这对于服务器来说是一个很好的解决方案,但它不会让您访问客户端上的 npm 模块。【参考方案5】:当您使用陨石时,当您将节点模块安装到 .meteor/local/build/server/
时,您实际上是安装到
~/.meteorite/meteors/meteor/meteor/f07715dc70de16a7aab84e56ab0c6cbd9c1f9dc6/dev_bundle/lib/node_modules
当您使用mrt bundle
创建部署包时,其他包也会被捆绑。
我没有在 Heroku 上尝试过,但是我检查了 node 模块在使用 mrt bundle 时被打包。
【讨论】:
以上是关于2013 Meteor NPM 包的主要内容,如果未能解决你的问题,请参考以下文章