Example #1
0
/**
 * Copy a project template and log created files if successful.
 */
function copyTemplate(templateDir, targetDir, templateVars, cb) {
  copyTemplateDir(templateDir, targetDir, templateVars, (err, createdFiles) => {
    if (err) return cb(err)
    createdFiles.sort().forEach(createdFile => {
      let relativePath = path.relative(targetDir, createdFile)
      console.log(`  ${chalk.green('create')} ${relativePath}`)
    })
    cb()
  })
}
Example #2
0
module.exports = function(template, target, vars) {
	var inDir = path.join(process.cwd(), 'templates', template);

	copy(inDir, target, vars, (err, createdFiles) => {
		console.log('in:' + inDir);
	  if (err) throw err
	  createdFiles.forEach(filePath => console.log(`Created ${filePath}`))
	  console.log('done!')
	});
};
Example #3
0
 getWebModulePrefs(args, ({umd, globalVariable, jsNext}) => {
   let templateDir = path.join(__dirname, `../templates/${WEB_MODULE}`)
   let templateVars = npmModuleVars(
     {umd, globalVariable, jsNext, name, nwbVersion}
   )
   copyTemplateDir(templateDir, targetDir, templateVars, (err, createdFiles) => {
     if (err) return cb(err)
     logCreatedFiles(targetDir, createdFiles)
     cb()
   })
 })
Example #4
0
 before(done => {
   originalCwd = process.cwd()
   originalNodeEnv = process.env.NODE_ENV
   delete process.env.NODE_ENV
   tmpDir = temp.mkdirSync('async-await')
   copyTemplateDir(path.join(__dirname, '../fixtures/projects/async-await'), tmpDir, {}, err => {
     if (err) return done(err)
     process.chdir(tmpDir)
     execSync('npm install', {stdio: [0, 1, 2]})
     done()
   })
 })
Example #5
0
 getWebModulePrefs(args, ({umd, globalVariable, jsNext}) => {
   let templateDir = path.join(__dirname, `../templates/${REACT_COMPONENT}`)
   let templateVars = npmModuleVars(
     {umd, globalVariable, jsNext, name, nwbVersion, REACT_VERSION}
   )
   copyTemplateDir(templateDir, targetDir, templateVars, (err, createdFiles) => {
     if (err) return cb(err)
     logCreatedFiles(targetDir, createdFiles)
     console.log('nwb: installing dependencies')
     installReact(targetDir)
     cb()
   })
 })
Example #6
0
  return new Promise(function(resolve, reject) {
    var inDir = path.join(__dirname, "..", "templates", template);

    copy(inDir, target, vars, function(err, createdFiles) {
      if (err) {
        throw err;
      } else {
        console.log("\n");

        createdFiles.forEach(filePath => {
          let fileName = path.basename(filePath);
          let dirName = path.dirname(filePath);

          if (/react-component/g.test(fileName)) {
            const newFilePath = path.resolve(
              dirName,
              fileName.replace(/react-component/g, vars.componentName)
            );

            renameFile(filePath, newFilePath);
            console.log(chalk.green("\tCreated ") + newFilePath);
          } else if (/package-name/g.test(fileName)) {
            const newFilePath = path.resolve(
              dirName,
              fileName.replace(/package-name/g, vars.packageName)
            );

            renameFile(filePath, newFilePath);
            console.log(chalk.green("\tCreated ") + newFilePath);
          } else {
            console.log(chalk.green("\tCreated ") + filePath);
          }
        });

        console.log("\n");

        resolve();
      }
    });
  });
Example #7
0
  if (!projectType) {
    throw new UserError(`nwb: a project type must be provided, one of: ${PROJECT_TYPES.join(', ')}`)
  }
  if (PROJECT_TYPES.indexOf(projectType) === -1) {
    throw new UserError(`nwb: project type must be one of: ${PROJECT_TYPES.join(', ')}`)
  }
}

const PROJECT_CREATORS = {
  [REACT_APP](args, name, targetDir, cb) {
    let templateDir = path.join(__dirname, `../templates/${REACT_APP}`)
    let templateVars = {name, nwbVersion, REACT_VERSION}
    copyTemplateDir(templateDir, targetDir, templateVars, (err, createdFiles) => {
      if (err) return cb(err)
      logCreatedFiles(targetDir, createdFiles)
      console.log('nwb: installing dependencies')
      installReact(targetDir)
      cb()
    })
  },

  [REACT_COMPONENT](args, name, targetDir, cb) {
    getWebModulePrefs(args, ({umd, globalVariable, jsNext}) => {
      let templateDir = path.join(__dirname, `../templates/${REACT_COMPONENT}`)
      let templateVars = npmModuleVars(
        {umd, globalVariable, jsNext, name, nwbVersion, REACT_VERSION}
      )
      copyTemplateDir(templateDir, targetDir, templateVars, (err, createdFiles) => {
        if (err) return cb(err)
        logCreatedFiles(targetDir, createdFiles)
        console.log('nwb: installing dependencies')
Example #8
0
    before(done => {
      process.env.NWB_EXPRESS_MIDDLEWARE = require.resolve('../../express')
      tmpDir = temp.mkdirSync('express-middleware')
      copyTemplateDir(path.join(__dirname, '../fixtures/projects/express-middleware'), tmpDir, {}, err => {
        if (err) return done(err)

        execSync('npm install', {cwd: tmpDir, stdio: [0, 1, 2]})

        server = spawn('node', ['server.js'], {cwd: tmpDir})

        // Start the HMR EventSource client when the initial build completes
        server.stdout.on('data', data => {
          console.log(`server stdout: ${data}`)
          if (state === States.INIT && /webpack built \w+ in \d+ms/.test(data)) {
            state = States.INIT_OK
            startHMRClient()
          }
        })

        // Fail if there's any error logging
        server.stderr.on('data', data => {
          console.log(`server stderr: ${data}`)
          done(new Error(`stderr output received: ${data}`))
        })

        function startHMRClient() {
          hmrClient = new EventSource('http://localhost:3001/__webpack_hmr')

          // Change a file to trigger a reload after the HMR client connects
          hmrClient.onopen = () => {
            console.log('HMR open: changing file in 5s')
            setTimeout(() => {
              state = States.CHANGED_FILE
              let content = fs.readFileSync(path.join(tmpDir, 'src/App.js'), 'utf-8')
              fs.writeFileSync(path.join(tmpDir, 'src/App.js'), content.replace('Welcome to', 'Change'))
            }, 5000)
          }

          // Fail on EventSource errors
          hmrClient.onerror = err => {
            done(new Error(`HMR client error: ${err}`))
          }

          hmrClient.onmessage = e => {
            if (e.data === '\uD83D\uDC93') {
              return
            }

            let data = JSON.parse(e.data)
            console.log(`HMR message: ${data.action}; state=${state}`)
            if (data.action === 'building') {
              if (state === States.CHANGED_FILE) {
                state = States.REBUILDING
              }
            }
            else if (data.action === 'built') {
              if (state === States.REBUILDING) {
                buildResults = data
                done()
              }
            }
            else {
              done(new Error(`HMR client received unexpected message: ${e.data}`))
            }
          }
        }
      })
    })
Example #9
0
#!/usr/bin/env node

var copy = require('copy-template-dir')
var path = require('path')
var argv = require('minimist')(process.argv.slice(2))

var cwd = process.cwd()
var templateDir = path.resolve(__dirname, 'template')
var input = argv._[0]
var targetDir = path.resolve(cwd, input)

copy(templateDir, targetDir, {
  name: input
}, function (err) {
  if (err) {
    console.error(err)
    process.exit(1)
  }
  console.log('Done. Happy hacking!')
})