我们将 npm 安装的节点模块放在 Meteor 项目中的什么位置
Where do we put node modules we install by npm in a Meteor project?
我遵循了 github meteorirc 项目的领导,并将它们放在/public/
我从/public/内部通过 npm 安装了我的节点模块,因此我有一个/public/node_modules/目录。
我不认为这是他们的"适当"或"标准"地方,因为根据流星文档......
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 或其他地方部署时工作?
cd /usr/local/meteor/lib/ && npm install <module>
要在 Meteor 中使用 Npm 模块,请添加 npm 模块。
首先,您需要添加一个 npm 包适配器,例如 meteorhacks:npm
meteor add meteorhacks:npm
然后通过运行 meteor 应用程序启动 meteor
,您会注意到项目中有一个新的packages.json
文件
添加这样的模块(您需要显式定义版本)
{
"request" : "2.53.0"
}
然后你可以在你的流星应用程序中使用 npm 模块,使用 Meteor.npmRequire
而不是require
var request = Meteor.npmRequire("request")
Meteor 从开发包中获取lib/node_modules
并创建一个符号链接或将其复制到 server/node_modules
,该链接位于项目下的隐藏.meteor
子文件夹中。
因此,如果您cd到开发捆绑包的lib
目录或.meteor
文件夹的server
目录(我相信它在build
中);您将能够使用节点模块。如果您在加载它们时遇到问题,您可能需要查看此问题。
捆绑文件夹添加到路径:
var staticTwitPath = path.resolve(base+'/bundle/static/'+twitPath);
这是我在咖啡脚本中的工作示例,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')
祝你好运!
这对我帮助很大,包括语法突出显示包!谢谢!
不过我使用了一个小助手,因为我认为这不会是我将使用的最后一个 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"
我正在使用这样的脚本,它可以很好地安装所有节点.js依赖项。它的行为类似于 Meteor 引擎分支中的官方支持(它在运行时安装依赖项),但它也支持从 git 存储库和类似的东西进行安装。
- 在Meteor项目中安装并包含npm模块后出错
- 我的 Meteor 项目如何通过服务器端 MongoDB/集合查找查询可靠地显示信息
- 在窗口上运行Meteor;您're不在Meteor项目目录中”;升级到Meteor.js 1.3之后
- 如何在现有的 Meteor 项目中使用语义 UI
- 我们将 npm 安装的节点模块放在 Meteor 项目中的什么位置
- 使用 Meteor 项目约束窗口
- 在Meteor项目中集成p5js
- 数据库项目有时不会显示在Meteor.js中
- 我应该如何用外部脚本构建Meteor项目
- 从Meteor.js中的数组中删除项目
- 如何在非Meteor项目中使用Meteor包
- 为什么这个基本的Meteor创建项目命令失败了?
- 将Collection添加到meteor.js项目
- Meteor:自动表单模板发布项目从0.9.3.1升级到1.2.0.2
- Meteor仅为集合中的所有项目检索一个图像
- 向Meteor项目添加第三方库
- 在Meteor视图中添加了新的集合项目后,如何运行客户端代码
- 从服务器上的Meteor集合获取项目会抛出“;可以't wait without Fiber”;
- 在Meteor 0.8.0(Blaze)中实现可选择的项目列表
- 如果存在数组的元素,则从 mongodb 集合中检索项目(meteor js)