[英]Using NPM packages in Meteor package.js
我正在嘗試使用glob
NPM模塊來簡化向Meteor包中添加文件的操作:
Package.on_test(function(api) {
Npm.depends({
"glob": "3.2.7"
});
var glob = Npm.require("glob");
api.add_files(glob.sync("styles/**/*.styl"), "client");
api.add_files(glob.sync("tests/styles/**/*.@(styl|css)"), "client");
});
這將行不通,因為直到后來, glob
目錄都不會添加到.npm/package/node_modules
。 如果我嘗試運行meteor test-packages ./
我收到錯誤消息:
找不到npm模塊'glob'。 您忘了給“ Npm.depends”打電話嗎?
但是,我可以這樣做誘使Meteor進行這項工作:
Package.on_test(function(api) {
Npm.depends({
"glob": "3.2.7"
});
var glob = Npm.require("glob");
if (glob) {
api.add_files(glob.sync("styles/**/*.styl"), "client");
api.add_files(glob.sync("tests/styles/**/*.@(styl|css)"), "client");
}
});
現在,我第一次運行meteor test-packages
,該應用程序加載了NPM依賴項,然后崩潰了。 如果我再次運行它,則已添加了glob
程序包,並且一切正常。 所以我想知道,除了Underscore和package.js
內部的fs
和path
類的內置模塊之外,是否還有更好的方法來使用Npm模塊?
我意識到我可以使用fs
來仿真此功能,但是globpattern語法更加簡潔易讀。
我不確定這是否有幫助,但是添加npm模塊有一種“欺騙”方式。
如果您正在測試,則可以使用npm install glob -g
全局安裝'glob'並npm install glob -g
並使用類似以下內容:
var glob = eval("require('glob');");
流星的鏈接器模塊無法解釋並更改它,因此您可以直接鏈接到npm模塊,因此可以使用它連接到全局npm模塊而不是本地模塊。
Npm.require
首次運行在package.js中不起作用的原因是,鏈接器使用package.js
來創建所需的npm模塊以及如何將其鏈接的想法。
之后,運行項目,並且可以將Npm.require
文件中與api.add_files
關聯的文件中的api.add_files
一起api.add_files
。
但是,如果要使用邏輯來確定要添加的文件,則必須訪問較低級別的文件,這就是運行eval()
的代碼可以做到的。
另一種選擇是手動安裝Npm模塊並使用eval加載它。 盡管它的級別很低,所以可能比它的價值更麻煩。 有關如何安裝npm文件的詳細信息, 請參見https://github.com/meteor/meteor/blob/devel/tools/meteor_npm.js
它基本上會創建一個“ shrinkwrap”,然后安裝npm模塊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.