Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ var blessPlugin = require('bless-webpack-plugin');
```

## API
### `blessPlugin([blessOptions[, pattern]])`
### `blessPlugin([blessOptions[, pattern[, outputFilename]]])`

- `blessOptions` is an options object for bless. It will be passed directly to it.
- `pattern` a regular expression to find assets that should be transformed with bless. Default: `/\.css$/`.



- `outputFilename` a filename for the blessed css files. If set, the original (unblessed) files will also be emitted. The following variables can be used:
- `[filebase]` The base name of the asset, without path or extension
- `[file]` The full name of the asset, including path and extension
20 changes: 15 additions & 5 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
var bless = require('bless');
var RawSource = require('webpack/lib/RawSource');
var _ = require('lodash');

module.exports = function(options, pattern) {
module.exports = function(options, pattern, outputFilename) {
pattern = pattern || /\.css$/;
options = options || {};
outputFilename = outputFilename || '[file]';

return {
apply: function(compiler) {
compiler.plugin("this-compilation", function(compilation) {
compilation.plugin("optimize-assets", function(assets, callback) {
var pending = 0;
var pending = 0, basename, output;

function done(err) {
pending--;
Expand All @@ -26,13 +26,23 @@ module.exports = function(options, pattern) {
.filter(pattern.test.bind(pattern))
.forEach(function(name) {
pending++;
new bless.Parser({ output: name, options : options })
basename = name.substring(name.lastIndexOf('/') + 1);
if (basename.lastIndexOf('.') !== -1) {
basename = basename.substring(0, basename.lastIndexOf('.'));
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you use path.parse instead? Not all operating systems (i.e. Windows) use / as a path separator, using the NodeJS provided modules here gives cross platform support for free.

output = compilation.getPath(outputFilename, {
filename: name,
basename: basename
});
new bless.Parser({ output: output, options : options })
.parse(assets[name].source(), function(err, files) {
if (err) {
done(err);
return;
}
delete assets[name];
if (outputFilename === name) {
delete assets[name];
}
files.forEach(function(file) {
assets[file.filename] = new RawSource(file.content);
});
Expand Down