Skip to content

Commit c8869bc

Browse files
committed
Merge pull request componentjs#69 from CamShaft/master
Add a configuration to copy files instead of symlink
2 parents 4f427c4 + 7d0f057 commit c8869bc

File tree

3 files changed

+68
-7
lines changed

3 files changed

+68
-7
lines changed

lib/builder.js

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
*/
55

66
var fs = require('fs')
7+
, cp = require('fs-extra').copy
78
, path = require('path')
89
, join = path.join
910
, dirname = path.dirname
@@ -48,6 +49,7 @@ function Builder(dir, parent) {
4849
images: [],
4950
fonts: []
5051
};
52+
this.copy = parent ? parent.copy : false;
5153
this.on('dependency', this.inherit.bind(this));
5254
}
5355

@@ -112,6 +114,17 @@ Builder.prototype.development = function(){
112114
this.dev = true;
113115
};
114116

117+
/**
118+
* Enable "copyFiles" in the build.
119+
*
120+
* @api public
121+
*/
122+
123+
Builder.prototype.copyFiles = function(){
124+
debug('copy files enabled');
125+
this.copy = true;
126+
};
127+
115128
/**
116129
* Enable "sourceURLs" in the build.
117130
*
@@ -673,15 +686,22 @@ Builder.prototype.buildAsset = function(type, fn){
673686
*/
674687

675688
Builder.prototype.copyTo = function(file, dest, fn){
676-
var dir = dirname(dest);
689+
var dir = dirname(dest)
690+
, self = this
691+
, done = function(err) {
692+
if (err && 'EEXIST' == err.code) return fn(null, dest);
693+
fn(err, dest);
694+
};
677695
debug('mkdir -p %s', dir);
678696
mkdir(dir, function(err){
679697
if (err) return fn(err);
680-
debug('link %s -> %s', file, dest);
681-
fs.symlink(file, dest, function(err){
682-
if (err && 'EEXIST' == err.code) return fn(null, dest);
683-
fn(err, dest);
684-
});
698+
if (self.copy){
699+
debug('cp %s -> %s', file, dest);
700+
cp(file, dest, done);
701+
} else {
702+
debug('link %s -> %s', file, dest);
703+
fs.symlink(file, dest, done);
704+
}
685705
});
686706
};
687707

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
"batch": "0.2.1",
1313
"mkdirp": "0.3.4",
1414
"debug": "*",
15-
"better-assert": "~0.1.0"
15+
"better-assert": "~0.1.0",
16+
"fs-extra": "~0.5.0"
1617
},
1718
"devDependencies": {
1819
"mocha": "*",

test/builder.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,46 @@ describe('Builder', function(){
169169
});
170170
})
171171

172+
it('should copy .images in copyFiles mode', function(done){
173+
var builder = new Builder('test/fixtures/assets');
174+
builder.copyFiles();
175+
builder.addLookup('test/fixtures');
176+
builder.copyAssetsTo('/tmp/build');
177+
builder.build(function(err, res){
178+
if (err) return done(err);
179+
assert(3 == res.images.length);
180+
assert('/tmp/build/assets/images/logo.png' == res.images[0]);
181+
assert('/tmp/build/assets/images/maru.jpeg' == res.images[1]);
182+
assert('/tmp/build/assets/images/npm.png' == res.images[2]);
183+
assert(exists('/tmp/build/assets/images/maru.jpeg'));
184+
assert(exists('/tmp/build/assets/images/logo.png'));
185+
assert(exists('/tmp/build/assets/images/npm.png'));
186+
// images aren't symlinks
187+
fs.lstat('/tmp/build/assets/images/npm.png', function(err, stats) {
188+
assert(stats.isSymbolicLink() == false);
189+
done();
190+
});
191+
});
192+
})
193+
194+
it('should copy .files in copyFiles mode', function(done){
195+
var builder = new Builder('test/fixtures/assets-parent');
196+
builder.copyFiles();
197+
builder.addLookup('test/fixtures');
198+
builder.copyAssetsTo('/tmp/build');
199+
builder.build(function(err, res){
200+
if (err) return done(err);
201+
assert(1 == res.files.length);
202+
assert('/tmp/build/assets/some.txt' == res.files[0]);
203+
assert(exists('/tmp/build/assets/some.txt'));
204+
// files aren't symlinks
205+
fs.lstat('/tmp/build/assets/some.txt', function(err, stats) {
206+
assert(stats.isSymbolicLink() == false);
207+
done();
208+
});
209+
});
210+
})
211+
172212
it('should rewrite css urls', function(done){
173213
var builder = new Builder('test/fixtures/assets-parent');
174214
builder.addLookup('test/fixtures');

0 commit comments

Comments
 (0)