我遵循github meteorirc项目的主导并将它们放入/ public /
我从内部/ public /通过npm安装了我的节点模块,因此我有一个/ public / node_modules /目录。
我不认为这是他们的'正确'或'标准'的地方,因为根据Meteor文档......
Meteor收集所有JavaScript文件,不包括任何内容 客户端和公共子目录,并将它们加载到Node.js服务器中 光纤内的实例
要加载的代码位于服务器目录和服务器js文件中,看起来像这样。
var require = __meteor_bootstrap__.require;
var path = require("path");
var fs = require('fs');
var base = path.resolve('.');
if (base == '/'){
base = path.dirname(global.require.main.filename);
}
var Twit;
var twitPath = 'node_modules/twit';
var publicTwitPath = path.resolve(base+'/public/'+twitPath);
var staticTwitPath = path.resolve(base+'/static/'+twitPath);
if (path.existsSync(publicTwitPath)){
Twit = require(publicTwitPath);
}
else if (path.existsSync(staticTwitPath)){
Twit = require(staticTwitPath);
}
else{
console.log('WARNING Twit not loaded. Node_modules not found');
}
根据文档,这不是标准的,我不相信我应该这样做。然而,它在我的开发平台和部署meteor.com的生产中都有效。
在项目的目录结构中应该安装节点模块,以便它们在本地工作,并在meteor.com或其他地方部署?
答案 0 :(得分:6)
cd /usr/local/meteor/lib/ && npm install <module>
答案 1 :(得分:2)
要在Meteor中使用Npm模块,请在中添加npm模块。
首先,您需要添加一个npm包适配器,例如meteorhacks:npm
meteor add meteorhacks:npm
然后运行meteor
启动流星应用,您会注意到项目中有一个新的packages.json
文件
添加这样的模块(您需要明确定义版本)
{
"request" : "2.53.0"
}
然后您可以在流星应用中使用npm模块,使用Meteor.npmRequire
代替require
var request = Meteor.npmRequire("request")
答案 2 :(得分:1)
Meteor从开发套件中获取lib/node_modules
并创建符号链接或将其复制到server/node_modules
,该文件位于项目下隐藏的.meteor
子文件夹中。
所以,如果你进入开发包的lib
目录或server
文件夹的.meteor
目录(我相信它在build
中);您将能够使用节点模块。如果您在加载时遇到问题,可能需要查看this question。
答案 3 :(得分:1)
您必须将捆绑文件夹添加到路径:
var staticTwitPath = path.resolve(base+'/bundle/static/'+twitPath);
以下是我在 coffeescript 中的工作示例, node_modules 位于公开文件夹中:
# loading node_modules from public folder
require = __meteor_bootstrap__.require
path = require("path")
fs = require('fs')
cheerioPath = 'node_modules/cheerio'
base = path.resolve('.')
if base == '/'
base = path.dirname(global.require.main.filename)
publicPath = path.resolve(base+'/public/'+cheerioPath)
staticPath = path.resolve(base+'/bundle/static/'+cheerioPath)
if path.existsSync(publicPath)
cheerio = require(publicPath)
else if path.existsSync(staticPath)
cheerio = require(staticPath)
else
console.log('node_modules not found')
祝你好运!
答案 4 :(得分:0)
这对我有很大帮助,包括语法高亮包!谢谢!
我使用了一个小助手,因为我认为这不会是我将使用的最后一个npm包;)
meteorNpm = do() ->
require = __meteor_bootstrap__.require
path = require 'path'
fs = require 'fs'
base = path.resolve '.'
if base is '/'
base = path.dirname global.require.main.filename
meteorNpm =
# requires npm modules placed in `public/node_modules`
require: (moduleName) ->
modulePath = 'node_modules/' + moduleName
publicPath = path.resolve(base + '/public/' + modulePath)
staticPath = path.resolve(base + '/bundle/static/' + modulePath)
if path.existsSync(publicPath)
module = require publicPath
else if path.existsSync(staticPath)
module = require staticPath
else
module = null
return module
像这样使用:
highlight = meteorNpm.require "highlight.js"
答案 5 :(得分:0)
我正在使用such script,它可以很好地安装所有node.js依赖项。它的行为类似于Meteor引擎分支中的官方支持(它在运行时安装依赖项),但它也支持从git存储库和类似的东西安装。