下面是關於如何使用Node.js和受流星爲例一起希望這是有幫助的
您應該創建一個流星包它可以讓你require
NPM模塊,用Npm.require('name')
,它是流星的方式來管理類似於npm包的代碼。 http://docs.meteor.com/#/full/packagejs
這裏是一個簡單的包:
/package_demo
/package_demo/package.js
/package_demo/server.js
package.js
// Standart package.js file with some of the options
Package.describe({
name: 'username:packagename',
summary: 'what this does',
version: '0.0.1'
});
// if you need any global/core or anything from npmjs.com
// it will make it available for us to use like Npm.require
// in the package files
Npm.depends({
'request': '2.62.0'
})
Package.onUse(function (api) {
// we are going to use mongo so we need to specify it
api.use('mongo', 'server');
// adding package files
api.addFiles('server.js', 'server');
// exporting the mongo collection to make it available to the meteor app
api.export('github', 'server');
});
server.js:
// we can require any npm modules we specify at package.js
var request = Npm.require('request')
// meteor code
// new mongo collection not needed if you defined it elsewhere
github = new Mongo.Collection('github');
// we wrap this with startup to run after the meteor server process is finished starting
// this makes sure github collection exists, if you have external collection
// that you connect with DDP or you know is available you don't have to use it.
Meteor.startup(function() {
console.log('server started');
// node js code - you can use the full power of node async
// query github api for "meteor" repo
request({
url: 'https://api.github.com/repos/meteor/meteor',
headers: {
'User-Agent': 'request'
}
},
// regular node js request callback
// but we made it compatible with meteor with Meteor.bindEnvironment(callback);
// it makes sure we have access inside the callback to github mongo collection
// always wrap callbacks to non-Meteor libraries with Meteor.bindEnvironment
// if you need access to meteor functions/objects etc... if we just wanted to
// console.log the information it can work without Meteor.bindEnvironment()
Meteor.bindEnvironment(function (error, response, body) {
if (!error && response.statusCode === 200 || response.statusCode === 304) {
var data = JSON.parse(body);
console.log(data.stargazers_count + ' Stars');
// meteor code
// insert it to meteor collection
github.insert({ id: data.id, fullName: data.full_name, stars: data.stargazers_count });
}
}));
});
我看見你也想require
本地NPM模塊,我想你可能會破解你的方式,並將其與一起加入10但我建議不要這樣做,因爲當你編譯你的項目並投入生產時,獲得路徑並不是可靠的途徑,並且可能會破壞。因此,您並不需要發佈npm模塊來需要它,您也可以將其全局安裝在機器上
在您完成npm init
並創建了npm軟件包全局安裝後,您的軟件包根目錄中的npm軟件包npm install . -g
然後可以驗證它是否全局存在npm ls -g
之後,您可以將自己的模塊包含在與上面相同的流星包中。
此外,您可能根本不需要創建節點js包,也可以將更多文件添加到流星包api.addFiles(['server.js', 'server2.js'], 'server');
,並且其中的代碼可以是節點js代碼(不支持nodejs導出),如果需要導出對象或什麼是全局可在您的流星應用程序,你可以使用api.export();
因爲共享代碼例如軟件包文件:
服務器2。JS
// code between the package files is shared
githubAPI.query();
並加入這server.js
githubAPI = {
query: function() {
request({
url: 'https://api.github.com/repos/meteor/meteor',
headers: {
'User-Agent': 'request'
}
}, Meteor.bindEnvironment(function (error, response, body) {
if (!error && response.statusCode === 200 || response.statusCode === 304) {
var data = JSON.parse(body);
console.log(data.stargazers_count + ' Stars');
github.insert({ id: data.id, fullName: data.full_name, stars: data.stargazers_count });
}
}));
}
};
控制檯輸出:登錄+插入到數據庫 2倍。所以,這就像要求你剛纔添加的文件:)
28212 Stars
28212 Stars
流星可與節點非常偉大的JS,你可以創建流星包,並使用相同的文件中的所有節點JS美容:)如果你需要的例子,我告訴你的東西回答 –
是的,請。那太好了!我希望你的解決方案允許通過npm添加Node.js pacakges(對於Node.js pacakage)。另外,我在網上找到的關於添加節點包的所有內容都需要將它們上傳到npm,我希望有一種方法可以繞過這一點。 – Alex
發現這個http://stackoverflow.com/questions/27308965/is-it-possible-to-use-local-unpublished-node-modules-in-meteor-apps。雖然我沒有定義'模塊',所以會有更詳細的指導。 – Alex