到目前为止,我们可以使用以下代码片段获取稍后以readStream打开的文件的绝对路径:
var base = path.resolve('.');
var file = base + '/data/test.csv';
fs.createReadStream(file)
自Meteor 0.6.5以来,基本路径指向.meteor/local/build/programs/...
还有Assets API,但它不能给我们一个路径但只返回读取文档。我们需要一个流来处理一些更大的数据文件吗?
答案 0 :(得分:58)
现在找到项目根目录的另一种方法是:
var base = process.env.PWD
请注意,这与process.cwd()
不同。相反,它是您运行meteor
命令的目录,这通常是您要查找的内容。另请注意,从部署的捆绑包运行应用程序时,这可能不会非常有用。
答案 1 :(得分:16)
当我更新到0.6.5时,我遇到了同样的困境。
我目前正在做的是这样的道路:
var meteor_root = Npm.require('fs').realpathSync( process.cwd() + '/../' );
这将在开发模式下返回 :
/my/application/.meteor/local/build/programs
和在捆绑模式下:
/my/application/build/app/programs
所以从这里开始,我就像我的应用程序的“根”路径一样:
var application_root = Npm.require('fs').realpathSync( meteor_root + '/../' );
// if running on dev mode
if( Npm.require('path').basename( Npm.require('fs').realpathSync( meteor_root + '/../../../' ) ) == '.meteor' ){
application_root = Npm.require('fs').realpathSync( meteor_root + '/../../../../' );
}
唯一可能失败的情况是,如果您碰巧将应用程序的文件夹命名为“.meteor”,那就是边缘情况。
相对于此,您可以访问您需要的任何其他内容。
此外,您还可以直接访问meteor bundler创建的assets文件夹:
var assets_folder = meteor_root + '/server/assets/' + Npm.require('path').basename( application_root );
这可能是暂时的,因为我希望最终添加更好的文件/路径交互API ..
希望有所帮助
答案 2 :(得分:6)
嘿,你不需要像上面的答案一样进行硬编码......看看This package
安装后,您可以访问流星的根路径,只需Meteor.rootPath
答案 3 :(得分:6)
从版本1.3开始,documented功能
include ../../../build.mak
include ../../../build/common.mak
export LIBDIR := ../../lib
RULES_MAK := $(PJDIR)/build/rules.mak
export G729_CODEC_LIB := libg729codec-$(TARGET_NAME)$(LIBEXT)
export _CFLAGS := $(CC_CFLAGS) $(OS_CFLAGS) $(HOST_CFLAGS) $(M_CFLAGS) \
$(CFLAGS) $(CC_INC)../.. $(CC_INC)../../g729/Headers \
$(CC_INC)../../../pjlib/include
export _CXXFLAGS:= $(_CFLAGS) $(CC_CXXFLAGS) $(OS_CXXFLAGS) $(M_CXXFLAGS) \
$(HOST_CXXFLAGS) $(CXXFLAGS)
export _LDFLAGS := $(CC_LDFLAGS) $(OS_LDFLAGS) $(M_LDFLAGS) $(HOST_LDFLAGS) \
$(LDFLAGS)
export G729_CODEC_SRCDIR = ../../g729
export G729_CODEC_OBJS = Sources/acelp_ca.o Sources/cod_ld8a.o Sources/dec_gain.o Sources/dspfunc.o Sources/g729a_encoder.o \
Sources/lpcfunc.o Sources/oper_32b.o Sources/post_pro.o Sources/pred_lt3.o Sources/tab_ld8a.o \
Sources/basic_op.o Sources/cor_func.o Sources/dec_lag3.o Sources/filter.o Sources/gainpred.o \
Sources/lspdec.o Sources/p_parity.o Sources/postfilt.o Sources/qua_gain.o Sources/taming.o \
Sources/bits.o Sources/de_acelp.o Sources/dec_ld8a.o Sources/g729a_decoder.o Sources/lpc.o \
Sources/lspgetq.o Sources/pitch_a.o Sources/pre_proc.o Sources/qua_lsp.o Sources/util.o
export G729_CODEC_CFLAGS = $(_CFLAGS)
TARGETS := $(G729_CODEC_LIB)
all: $(TARGETS)
doc:
cd .. && doxygen docs/doxygen.cfg
dep: depend
distclean: realclean
.PHONY: dep depend clean realclean distclean
.PHONY: $(TARGETS)
.PHONY: $(G729_CODEC_LIB)
libg729codec: $(G729_CODEC_LIB)
$(G729_CODEC_LIB):
$(MAKE) -f $(RULES_MAK) APP=G729_CODEC app=libg729codec $(subst /,$(HOST_PSEP),$(LIBDIR)/$@)
clean print_lib:
$(MAKE) -f $(RULES_MAK) APP=G729_CODEC app=libg729codec $@
realclean:
$(subst @@,$(subst /,$(HOST_PSEP),.libg729codec-$(TARGET_NAME).depend),$(HOST_RMR))
$(MAKE) -f $(RULES_MAK) APP=G729_CODEC app=libg729codec $@
depend:
$(MAKE) -f $(RULES_MAK) APP=G729_CODEC app=libg729codec $@
似乎是可靠地获得项目路径的最佳方式。
答案 4 :(得分:4)
对于流星0.8.3,
__meteor_bootstrap__.serverDir
在服务器模式下运行时给出工作目录。
例如
if (Meteor.isServer) {
console.log(__meteor_bootstrap__.serverDir);
}
答案 5 :(得分:2)
您可以通过以下方式获取项目的基本根路径
process.env.PWD
答案 6 :(得分:1)
从Meteor 1.2.1开始,这对我有用:
var absoluteBasePath = path.resolve('../../../../../.');
使用split
的结果相同:
var absoluteBasePath = path.resolve('.').split(path.sep + '.meteor')[0];
使用process.cwd()
:
var absoluteBasePath = path.resolve(process.cwd(), '../../../../../');
var absoluteBasePath = path.resolve(process.cwd()).split(path.sep + '.meteor')[0];