需要文件夹列表中的所有文件,而不是在JS中单独添加它们

时间:2013-12-07 14:48:33

标签: javascript node.js coffeescript

我不太了解node.Is我可以做任何事情来迭代对象,而不必每次都需要它

folderOrder = ['routes', 'models','fixtures', 'views', 'controllers']

require 'routes/posts_route'
require 'routes/post_route'
require 'models/post'

无论如何,我在文件夹路由和模型中创建的所有新文件都将自动需要,而不需要每个文件。我的例子是https://github.com/abhayathapa/ember-blogger/blob/master/app/initialize.coffee

任何帮助将不胜感激。我已经尝试了node.js require all files in a folder?中的答案,但我得到了相同的结论---找不到模块“fs”

3 个答案:

答案 0 :(得分:3)

您可以尝试这样的事情(如果您使用的是node.js ):

folderOrder = ['routes', 'models','fixtures', 'views', 'controllers']

fs = require 'fs'
folderOrder.forEach (folder) ->
  dir = __dirname + '/' + folder + '/'
  files = fs.readdirSync dir
  files.forEach (file) ->
    require dir + file


更新

在检查了您链接的示例后,似乎这与节点无关。它是浏览器代码,使用早午餐来管理构建。但是,在initialize.coffee中,已经有一个注释的代码片段可以完全执行此操作,如果您取消注释,它似乎可以正常工作,并注释掉“手动”要求。不过,我不知道它为什么不首先使用。

因此,initialize.coffee应该包含这个:

# ===== Config =====
window.App = require 'config/app'
require 'config/router'
require 'config/store'

# Load all modules in order automagically. 
# Ember likes things to work this way so everything is in the App.* namespace.
folderOrder = [
  'routes', 'models','fixtures', 'views', 'controllers', 'helpers', 'templates'
]

folderOrder.forEach (folder) ->
  # Go through the prefixes in order and require them
  window.require.list().filter((module) ->
    new RegExp("^#{folder}/").test(module)
  ).forEach((module) -> require(module))

编辑完文件后,从根文件夹运行brunch w -s,它应该正常工作。

答案 1 :(得分:1)

是的,我使用的是:

fs = require 'fs'
requiredFiles = {}

for file in fs.readdirSync __dirname when file isnt 'index.coffee'
    requiredFiles[file.replace /\.coffee$/, ""] = require "./#{file}"

# requiredFiles is populated with all files in the current path, except index.coffee

答案 2 :(得分:0)

我会做类似于@mutil的事情,但会将该逻辑放在每个给定的文件夹中。

给定一系列路径,每个文件夹中都有一个index.coffee:

fs = require 'fs'

module.exports = (path)->
  fs.readdir "./#{path}", (err, files) ->
    if err?
      return err
    else
      return (require "./#{file}" for file in files when file isnt 'index.coffee' and file isnt '.DS_Store')

for folder in folderOrder
  require("./#{folder}")(folder) for folder in folderOrder
在initialize.coffee中

,但是你可能会遇到一些异步问题。