Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 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
4 changes: 0 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -92,10 +92,6 @@
"jest": "^20.0.4",
"lodash": "^4.17.4",
"ncp": "^2.0.0",
"node-sass": "^4.5.3",
"sass-loader": "^6.0.6",
"stylus": "^0.54.5",
"stylus-loader": "^3.0.1",
"uuid": "^3.0.1"
},
"dependencies": {
Expand Down
1 change: 0 additions & 1 deletion src/lib/webpack/dependency-install-loader.js
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ module.exports = function(source, map) {
Promise.all(deps.map(isInstalled))
.then( installed => {
let toInstall = deps.filter( (dep, index) => !installed[index] );

if (toInstall.length) {
return installDeps(toInstall, query.save);
}
Expand Down
45 changes: 45 additions & 0 deletions src/lib/webpack/proxy-loader.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
var utils = require('loader-utils');
var requireRelative = require('require-relative');

function proxyLader(source, map) {
var options = utils.getOptions(this);

// First loader run store passed options & remove proxy-loader specific
if (!this.query.__proxy_loader__) {
this.query.__proxy_loader__ = { loader: options.loader, cwd: options.cwd };

// remove proxy-loader options and make this.query act as requested loader query
swapOptions(this, options);
Copy link
Member

Choose a reason for hiding this comment

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

This is clever.

}
// Save it for future calls that use this loader (via this.addDependency)
var proxyOptions = this.query.__proxy_loader__;

var loader;
try {
loader = requireRelative(proxyOptions.loader, proxyOptions.cwd);
} catch (e) {
loader = require(proxyOptions.loader);
}

// run loader
return loader.bind(this)(source, map);
Copy link
Member

Choose a reason for hiding this comment

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

Could use loader.call(this, source, map).

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Forgot how to ES5

}

function swapOptions(loaderContext, newOptions) {
var copy = {};
var key = '';

for (key in loaderContext.options) {
copy[key] = newOptions[key];
}

delete loaderContext.query.options;
delete loaderContext.query.loader;
delete loaderContext.query.cwd;

for (key in copy) {
loaderContext.query[key] = copy[key];
}
}

module.exports = proxyLader;
44 changes: 31 additions & 13 deletions src/lib/webpack/webpack-base-config.js
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,10 @@ export default (env) => {
modules: [
resolve(__dirname, '../../../node_modules'),
resolve(cwd, 'node_modules')
]
],
alias: {
'proxy-loader': require.resolve('./proxy-loader')
}
}
}),

Expand Down Expand Up @@ -108,50 +111,65 @@ export default (env) => {
enforce: 'pre',
test: /\.less$/,
use: [
{
loader: 'proxy-loader',
options: {
cwd,
loader: 'less-loader',
options: {
sourceMap: true
}
}
},
{
loader: resolve(__dirname, './dependency-install-loader'),
options: {
modules: ['less', 'less-loader'],
save: true
}
},
{
loader: 'less-loader',
options: { sourceMap: true }
}
]
},
{
enforce: 'pre',
test: /\.s[ac]ss$/,
use: [
{
loader: 'proxy-loader',
options: {
cwd,
loader: 'sass-loader',
options: { sourceMap: true }
}
},
{
loader: resolve(__dirname, './dependency-install-loader'),
options: {
modules: ['node-sass', 'sass-loader'],
save: true
}
},
{
loader: 'sass-loader',
options: { sourceMap: true }
}
]
},
{
enforce: 'pre',
test: /\.styl$/,
use: [
{
loader: 'proxy-loader',
options: {
cwd,
loader: 'stylus-loader',
options: { sourceMap: true }
}
},
{
loader: resolve(__dirname, './dependency-install-loader'),
options: {
cwd,
modules: ['stylus', 'stylus-loader'],
save: true
}
},
{
loader: 'stylus-loader',
options: { sourceMap: true }
}
]
},
Expand Down
8 changes: 4 additions & 4 deletions tests/build.snapshot.js
Original file line number Diff line number Diff line change
Expand Up @@ -74,12 +74,12 @@ export default {
'route-profile.chunk.*.js.map': { size: 8607 },
'index.html': { size: 870 },
'style.*.css': { size: 1065 },
'style.*.css.map': { size: 2246 },
'style.*.css.map': { size: 2345 },
'ssr-build': {
'ssr-bundle.js': { size: 39459 },
'ssr-bundle.js.map': { size: 65629 },
'style.*.css': { size: 1065 },
'style.*.css.map': { size: 2250 },
'style.*.css.map': { size: 2345 },
}
},
'full': {
Expand All @@ -92,12 +92,12 @@ export default {
'route-profile.chunk.*.js.map': { size: 8609 },
'index.html': { size: 850 },
'style.*.css': { size: 1065 },
'style.*.css.map': { size: 2345 },
'style.*.css.map': { size: 1947 },
'ssr-build': {
'ssr-bundle.js': { size: 41715 },
'ssr-bundle.js.map': { size: 66661 },
'style.*.css': { size: 1065 },
'style.*.css.map': { size: 2345 },
'style.*.css.map': { size: 1947 },
}
}
};
Expand Down