diff --git a/lib/builder.js b/lib/builder.js index a9c4941..26a79f4 100644 --- a/lib/builder.js +++ b/lib/builder.js @@ -18,7 +18,8 @@ var fs = require('fs') , utils = require('./utils') , dirname = path.dirname , basename = path.basename - , strtojs = require('string-to-js'); + , strtojs = require('string-to-js') + , syntaxError = require('syntax-error'); /** * Expose `Builder`. @@ -658,15 +659,21 @@ Builder.prototype.buildType = function(type, fn, process){ // build files if (conf[type]) { conf[type].forEach(function(file){ - var path = self.path(file); + var filepath = self.path(file); batch.push(function(done){ var val = self._files[file]; // on disk if (null == val) { - debug('read file %s', path); - fs.readFile(path, 'utf8', function(err, str){ + debug('read file %s', filepath); + fs.readFile(filepath, 'utf8', function(err, str){ if (err) return fn(err); + if (path.extname(filepath) === '.js') { + err = syntaxError(str, filepath); + if (err) { + return fn(new Error('' + err)); + } + } done(null, process(self, file, str)); }); return diff --git a/package.json b/package.json index b5d9b39..4a6df80 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,8 @@ "debug": "*", "better-assert": "~0.1.0", "cp": "~0.1.0", - "string-to-js": "0.0.1" + "string-to-js": "0.0.1", + "syntax-error": "~0.1.0" }, "devDependencies": { "mocha": "*", diff --git a/test/builder.js b/test/builder.js index 8fb0000..f42322f 100644 --- a/test/builder.js +++ b/test/builder.js @@ -42,7 +42,7 @@ describe('Builder', function(){ var builder = new Builder('test/fixtures/hello'); builder.addLookup('test/fixtures'); builder.on('dependency', function(builder){ - builder.dir.should.be.a('string'); + builder.dir.should.be.an.instanceof(String); builder.basename.should.equal('component-emitter'); done(); }); @@ -92,7 +92,7 @@ describe('Builder', function(){ var builder = new Builder('test/fixtures/hello'); builder.addLookup('test/fixtures'); builder.on('dependency', function(builder){ - builder.dir.should.be.a('string'); + builder.dir.should.be.an.instanceof(String); builder.basename.should.equal('component-emitter'); done(); }); @@ -444,4 +444,12 @@ describe('Builder', function(){ done(); }) }) + + it('should catch syntax error', function(done){ + var builder = new Builder('test/fixtures/syntax-error'); + builder.build(function(err){ + err.message.should.include('ParseError: Unexpected identifier') + done() + }) + }) }) diff --git a/test/fixtures/syntax-error/component.json b/test/fixtures/syntax-error/component.json new file mode 100644 index 0000000..2be0e02 --- /dev/null +++ b/test/fixtures/syntax-error/component.json @@ -0,0 +1,7 @@ +{ + "name": "syntax-error", + "main": "index.js", + "scripts": [ + "index.js" + ] +} \ No newline at end of file diff --git a/test/fixtures/syntax-error/index.js b/test/fixtures/syntax-error/index.js new file mode 100644 index 0000000..995813d --- /dev/null +++ b/test/fixtures/syntax-error/index.js @@ -0,0 +1 @@ +abc def() \ No newline at end of file