2013-03-23 295 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