Skip to content

Commit 47705ed

Browse files
julienjweaverryan
authored andcommitted
Allow to add vues loader
1 parent 0efcd3e commit 47705ed

File tree

5 files changed

+53
-0
lines changed

5 files changed

+53
-0
lines changed

index.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,19 @@ module.exports = {
341341
return this;
342342
},
343343

344+
/**
345+
* If enabled, the vue-loader is added:
346+
* https://vue-loader.vuejs.org/en/
347+
*
348+
* @param {object} options see https://vue-loader.vuejs.org/en/configurations/advanced.html
349+
* @return {exports}
350+
*/
351+
enableVueLoader(options = {}) {
352+
webpackConfig.enableVueLoader(options);
353+
354+
return this;
355+
},
356+
344357
/**
345358
* If enabled, the output directory is emptied between
346359
* each build (to remove old files).

lib/WebpackConfig.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ class WebpackConfig {
4545
resolve_url_loader: true
4646
};
4747
this.useLessLoader = false;
48+
this.useVueLoader = false;
49+
this.vueOptions = {};
4850
this.cleanupOutput = false;
4951
this.sharedCommonsEntryName = null;
5052
this.providedVariables = {};
@@ -222,6 +224,11 @@ class WebpackConfig {
222224
this.useReact = true;
223225
}
224226

227+
enableVueLoader(options) {
228+
this.useVueLoader = true;
229+
this.vueOptions = options;
230+
}
231+
225232
cleanupOutputBeforeBuild() {
226233
this.cleanupOutput = true;
227234
}

lib/config-generator.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,16 @@ class ConfigGenerator {
154154
});
155155
}
156156

157+
if (this.webpackConfig.useVueLoader) {
158+
loaderFeatures.ensureLoaderPackagesExist('vue');
159+
160+
rules.push({
161+
test: /\.vue/,
162+
loader: 'vue-loader',
163+
options: this.webpackConfig.vueOptions
164+
});
165+
}
166+
157167
this.webpackConfig.loaders.forEach((loader) => {
158168
rules.push(loader);
159169
});

lib/loader-features.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,11 @@ const loaderFeatures = {
3535
method: 'enableReactPreset()',
3636
packages: ['babel-preset-react'],
3737
description: 'process React JS files'
38+
},
39+
vue: {
40+
method: 'enableVueLoader()',
41+
packages: ['vue-loader'],
42+
description: 'load VUE files'
3843
}
3944
};
4045

test/WebpackConfig.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,24 @@ describe('WebpackConfig object', () => {
291291
});
292292
});
293293

294+
describe('enableVueLoader', () => {
295+
it('Call with no config', () => {
296+
const config = createConfig();
297+
config.enableVueLoader();
298+
299+
expect(config.useVueLoader).to.be.true;
300+
});
301+
302+
it('Pass config', () => {
303+
const config = createConfig();
304+
config.enableVueLoader({ extractCSS: true });
305+
306+
expect(config.useVueLoader).to.be.true;
307+
expect(config.vueOptions.extractCSS).to.be.true;
308+
});
309+
310+
});
311+
294312
describe('addLoader', () => {
295313
it('Adds a new loader', () => {
296314
const config = createConfig();

0 commit comments

Comments
 (0)