Meteor Package api.add_files 添加整个文件夹 [英] Meteor Package api.add_files add entire folder

查看:42
本文介绍了Meteor Package api.add_files 添加整个文件夹的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想将整个文件夹添加到我的包中.是否可以在 package.js 文件中使用 api.add_files 添加整个文件文件夹,而不是单独添加每个文件?也许是这样的:

I would like to add an entire folder of files to my package. Instead of adding each file individually, is it possible to add an entire folder of files using api.add_files in the package.js file? Perhaps something like:

Package.on_use(function(api) {

api.add_files(["files/*","client");

});

推荐答案

我认为目前公共 API 中没有类似的东西.

I don't think there's something like that currently in the public API.

但是,您可以使用普通的旧 Node.JS 来实现您想要做的事情.

However, you can use plain old Node.JS to achieve what you want to do.

我们的包结构如下:

/packages/my-package
    |-> client
    |   |-> nested
    |   |   |-> file3.js
    |   |-> file1.js
    |   |-> file2.js
    |-> my-package.js
    |-> package.js

我们构建了一个辅助函数如下:

We build a helper function as follow :

function getFilesFromFolder(packageName,folder){
    // local imports
    var _=Npm.require("underscore");
    var fs=Npm.require("fs");
    var path=Npm.require("path");
    // helper function, walks recursively inside nested folders and return absolute filenames
    function walk(folder){
        var filenames=[];
        // get relative filenames from folder
        var folderContent=fs.readdirSync(folder);
        // iterate over the folder content to handle nested folders
        _.each(folderContent,function(filename){
            // build absolute filename
            var absoluteFilename=folder+path.sep+filename;
            // get file stats
            var stat=fs.statSync(absoluteFilename);
            if(stat.isDirectory()){
                // directory case => add filenames fetched from recursive call
                filenames=filenames.concat(walk(absoluteFilename));
            }
            else{
                // file case => simply add it
                filenames.push(absoluteFilename);
            }
        });
        return filenames;
    }
    // save current working directory (something like "/home/user/projects/my-project")
    var cwd=process.cwd();
    // chdir to our package directory
    process.chdir("packages"+path.sep+packageName);
    // launch initial walk
    var result=walk(folder);
    // restore previous cwd
    process.chdir(cwd);
    return result;
}

你可以像这样使用它:

Package.on_use(function(api){
    var clientFiles=getFilesFromFolder("my-package","client");
    // should print ["client/file1.js","client/file2.js","client/nested/file3.js"]
    console.log(clientFiles);
    api.add_files(clientFiles,"client");
});

我们只是使用 Node.JS fs utils 来处理文件系统.

We simply use Node.JS fs utils to work with the file system.

这篇关于Meteor Package api.add_files 添加整个文件夹的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆