在 Meteor 包中使用 npm
Posted
技术标签:
【中文标题】在 Meteor 包中使用 npm【英文标题】:Use npm in Meteor packages 【发布时间】:2015-01-22 20:14:41 【问题描述】:试图找出将 npm 包加载到 Meteor 中的方法。具体来说,我尝试使用future-npm
我试过这样做:
Package.describe(
summary: "Blah blah",
version: '0.0.1'
);
Npm.depends(future: "2.3.1");
Package.onUse(function (api)
api.addFiles('lubert.js', 'server');
api.export('Lubert');
);
不幸的是,我收到以下控制台错误
Uncaught ReferenceError: Npm is not defined
我已经阅读了documentation 并且没有加载任何依赖项
我做错了什么?
更新 2:我的 package.js 看起来像
Package.describe(
name: 'trepafi:package',
summary: '',
version: '0.0.3',
git: 'https://github.com/trepafi/meteor-package.git'
);
Npm.depends(
"future": "2.3.1"
);
Package.onUse(function(api)
api.versionsFrom('1.0');
api.use(['tracker', 'underscore'], ['client']);
api.addFiles(['package.js'], ['client']);
api.export('Package', ['client']);
);
更新 1:我的 package.json 看起来像
"name": "trepafi-package",
"version": "0.0.3",
"description": "Package for Meteor",
"repository":
"type": "git",
"url": "https://github.com/trepafi/meteor-package.git"
,
"author": "Lubert Palacios",
"license": "MIT",
"homepage": "https://github.com/trepafi/meteor-package",
"dependencies":
"future": "^2.3.1"
我也尝试过使用 meteorhacks:npm 没有成功。 如果我可以使用“原生”方式就好了
【问题讨论】:
你的包文件结构是什么?你的语法对我来说很好。 github.com/meteorhacks/npm 这应该可以解决问题 @saimeunt 刚刚添加了 @Sindis 我已经尝试过了,但没有成功 你不需要提供 package.json,只需要一个 package.js 就在它自己的包目录下。 【参考方案1】:您应该在 package.js
文件的末尾对所有 Npm.require
s 进行分组。
对于future-npm
。在package.js
中不需要Npm.depends
,傻瓜。它已经包含在流星中......只是Npm.require
某处,你很高兴。为此:
不要对 package.js
名称产生歧义。请改用trepafi:package.js
。
您不需要 package.json
.. Npm.depends
已为您服务。
删除这个:api.addFiles(['package.js'], ['client']);
,因为它看起来像一个循环依赖.. 哟,我把你的 package.js 放在你的 package.js 中.. 不酷,Xzibit。
由于 Npm.require 仅适用于服务器端,因此您需要将 trepafi:package.js
包含为服务器端。例如:
api.addFiles(['trepafi:package.js'], ['server']);
所以你的结构应该至少是:
trepafi:package/
- package.js
- trepafi:package.js
- <other files..>
Future
不需要 package.json。它已经包含在 Meteor 中。
您的package.js
应如下所示:
Package.describe(
name: 'trepafi:package',
summary: '',
version: '0.0.3',
git: 'https://github.com/trepafi/meteor-package.git'
);
Package.onUse(function(api)
api.versionsFrom('METEOR@1.0');
api.use(['tracker', 'underscore','meteor'], ['client']);
api.addFiles(['trepafi:package.js'], ['server']);
api.export('Package', ['client']);
);
//if you really need Npm.depends:
Npm.depends(
'prerender-node': '1.0.6',
'send' : '0.10.1'
);
// we don't need no package.json
您的trepafi:package.js
应如下所示:
var Future = Npm.require('future');
var future = new Future();
// use your future to make Doc Brown proud.
var useFuture = function(asyncFunc) //expects function with callback somewhere
asyncFunc(function(err, result)
if(err) future.throw("OMG something went wrong!");
else return future.return(result);
);
return future.wait();
;
Meteor.startup(function()
//something
);
阅读:
package.js
的显着变化是 versionsFrom
和 api.use
现在添加了 meteor
。
祝你好运!
【讨论】:
谢谢。我想知道为什么我的浏览器日志中出现“Npm is missing”,指的是 ./myPackage/server 中的一个文件。使用 Meteor.isServer 修复了它,但实际上不需要服务器目录中的文件。所以......显然 api.addfiles() 中的 'client' 和 'server' 声明具有优先权,并且使此类目录名称在包中变得不必要。以上是关于在 Meteor 包中使用 npm的主要内容,如果未能解决你的问题,请参考以下文章
使用 Iron Router 在 Meteor 包中包含 HTML 模板
Angular-Meteor - 如何在基于包的设计中包含 ng 模板?