How to create full path with node's fs.mkdirSync?

后端 未结 22 1876
故里飘歌
故里飘歌 2020-11-29 18:03

I\'m trying to create a full path if it doesn\'t exist.

The code looks like this:

var fs = require(\'fs\');
if (!fs.existsSync(newDest)) fs.mkdirSync         


        
22条回答
  •  清酒与你
    2020-11-29 18:41

    An asynchronous way to create directories recursively:

    import fs from 'fs'
    
    const mkdirRecursive = function(path, callback) {
      let controlledPaths = []
      let paths = path.split(
        '/' // Put each path in an array
      ).filter(
        p => p != '.' // Skip root path indicator (.)
      ).reduce((memo, item) => {
        // Previous item prepended to each item so we preserve realpaths
        const prevItem = memo.length > 0 ? memo.join('/').replace(/\.\//g, '')+'/' : ''
        controlledPaths.push('./'+prevItem+item)
        return [...memo, './'+prevItem+item]
      }, []).map(dir => {
        fs.mkdir(dir, err => {
          if (err && err.code != 'EEXIST') throw err
          // Delete created directory (or skipped) from controlledPath
          controlledPaths.splice(controlledPaths.indexOf(dir), 1)
          if (controlledPaths.length === 0) {
            return callback()
          }
        })
      })
    }
    
    // Usage
    mkdirRecursive('./photos/recent', () => {
      console.log('Directories created succesfully!')
    })
    

提交回复
热议问题