繁体   English   中英

2013年流星NPM包

[英]2013 Meteor NPM Packages

更新 此解决方案描述了如何在Meteor中有效使用新的Npm系统。


目前在Meteor中使用NPM包的方法是什么?

截至2013年3月22日,没有关于此的官方文档。

关于这一点有几个问题,特别是这个问题,但解决方案似乎已经过时了:引擎分支已不复存在,而且我无法在Meteor的Npm.require上找到任何内容。

此处发布的另一个解决方案是指示安装到.meteor/ build文件夹中。 当我安装到Heroku时,这似乎不是一个有效的解决方案,因为buildpack使用meteor bundle捆绑程序,然后再运行它。 因此,临时构建文件夹似乎不是一个有效的选项。

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

在相关的说明中,我正在尝试使用亚马逊SDK(针对s3) - 将它打包为陨石包更好吗?

Arunoda 创建了一个NPM Atmosphere软件包 ,允许您像以前一样使用任何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');

目前在流星中使用NPM的方法

  1. 用NPM名称替换下面的x
  2. 将下面的文件大纲放在/ meteor-project-root / packages / x /中
  3. 流星添加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"]);
});

注意:某些软件包只能在客户端或服务器上运行,如果遇到问题,请尝试仅包含您要使用它的一方。

我一直在使用梦幻般的“ browserify ”,它就像一个魅力。 这是使用Arunda 的NPM Atmosphere包 ,或者使用带有package.js的Npm.require的替代方案,可以说有一些优点:

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

以下是它的工作原理:

  1. 我在隐藏的.npm文件夹中为npm依赖项创建了一个单独的项目
  2. 我使用browserify创建一个将由meteor加载的bundle.js
  3. 我使用grunt watch来确保每次安装新的npm包时,都会更新bundle.js

这是我的目录结构:

my_meteor_project/
    lib/
        bundle.js

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

这是一个entrypoint.js的例子(遗憾的是我必须使用全局变量,以便断言,url和_在Meteor代码中可用)

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或新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
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创建部署包时,其他包也会捆绑在一起。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM