capaj / require-globify

transform for browserify, which allows to require files with globbing expressions
MIT License
70 stars 11 forks source link

Trying to globify coffee script #16

Closed vojtatranta closed 9 years ago

vojtatranta commented 9 years ago

Is it possibly to globify coffee script? require('./path//to//*.coffee')? If I try this I get unexpected string errors. Using coffeeify does not help too. Any idea?

call-a3 commented 9 years ago

What are the exact error messages that you get? (Can you link to a repo or describe in more detail what your file layout looks like?)

vojtatranta commented 9 years ago

My gulpfile

gulp = require 'gulp'
browserify = require 'gulp-browserify'
reactify = require 'coffee-reactify'
coffeeify = require 'coffeeify'
watch = require 'gulp-watch'
cjsx = require 'gulp-cjsx'
globify = require 'require-globify'

jsDir = './blog/frontend/js/**/*'

gulp.task 'scripts', ->
    gulp.src(jsDir)
    .pipe(cjsx())
    .pipe(browserify(
        transform: [
              ['require-globify','coffee-reactify', 'coffeeify'],
          ],
        extensions: ['.cjsx', '.coffee'],
    ))
    .pipe(gulp.dest('./blog/static/js'))

gulp.task 'default', (cb) ->
    gulp.start 'scripts'

    gulp.watch jsDir, ->
        gulp.star  'scripts'

My main.coffee (entry frontend file)

React = require 'react'

require '../../core/**/templates/**/*.cjsx', glob: true

React.render React.createElement(require(TEMPLATE), STATE), document.body

I get error: Error: Parsing file /Users/vojtatranta/django/blog/blog/core/templates/base.cjsx: Line 1: Unexpected string

Seems like Browserify tries to require .cjsx file but cannot read it because coffee-reactify transformation has not load yet.

call-a3 commented 9 years ago

Have you tried rearranging the transforms so require-globify comes last?

vojtatranta commented 9 years ago

Yup, now results. However, I solved it using vanilla Browserify:

gulp = require 'gulp'
browserify = require 'browserify'
reactify = require 'coffee-reactify'
watch = require 'gulp-watch'
cjsx = require 'gulp-cjsx'
globify = require 'require-globify'
source = require 'vinyl-source-stream'
buffer = require 'vinyl-buffer'

jsSource = './blog/frontend/js/main.js'

filesToWatch = './blog/**/*.(js|cjsx|coffee)'

gulp.task 'scripts', ->
    b = browserify(
        entries: [jsSource],
        transform: [globify, reactify]
        )
    return b.bundle()
         .pipe(source('main.js'))
         .pipe(buffer())
         .pipe(gulp.dest('./blog/static/js/'))

gulp.task 'default', (cb) ->
    gulp.start 'scripts'

    gulp.watch ['./blog/frontend/js/**/*.coffee', './blog/**/templates/**/*.cjsx'], ->
        gulp.start 'scripts'

I think you may close this issue, thank you :)