在Meteor包中使用npm

时间:2014-11-24 23:46:27

标签: meteor npm

试图找出将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没有成功。 如果我可以使用" native"那就太好了。方式

1 个答案:

答案 0 :(得分:5)

您应该在Npm.require文件的末尾对所有package.js进行分组。

future-npm。你不需要Npm.depends中的package.js,傻。它已经包含在流星中..只是Npm.require某个地方,你很高兴。要做到这一点:

  1. 不要对package.js名称含糊不清。请改用trepafi:package.js

  2. 您不需要package.json .. Npm.depends让您受到保护。

  3. 删除这个:api.addFiles(['package.js'], ['client']);,因为它看起来像一个循环的依赖.. 哟dawg我在你的包里找到了你的谎言package.js ..不酷,Xzibit

  4. 由于Npm.require仅适用于服务器端,因此您需要将trepafi:package.js包含在服务器端。 e.g:

    api.addFiles(['trepafi:package.js'], ['server']);

  5. 所以你的结构至少

    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      
    });
    

    READ:

    package.js中的显着变化versionsFromapi.use现已添加meteor

    祝你好运!