From 6c966f46bbdd8e73900a64e112e7eb730442814a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hi=E1=BB=83n=20=C4=90=C3=A0o=20Vinh?= Date: Wed, 25 Jul 2018 23:51:54 +0700 Subject: [PATCH] feat(build): set output target before configureWebpack, close #1941 (#1943) --- .../cli-service/__tests__/buildLib.spec.js | 40 +++++++++++++++++++ .../lib/commands/build/resolveLibConfig.js | 3 ++ 2 files changed, 43 insertions(+) diff --git a/packages/@vue/cli-service/__tests__/buildLib.spec.js b/packages/@vue/cli-service/__tests__/buildLib.spec.js index 177b39511..e460b5cca 100644 --- a/packages/@vue/cli-service/__tests__/buildLib.spec.js +++ b/packages/@vue/cli-service/__tests__/buildLib.spec.js @@ -88,3 +88,43 @@ test('build as lib (js)', async () => { return window.testLib.bar })).toBe(2) }) + +test('build as lib with webpackConfiguration depending on target (js)', async () => { + const project = await create('build-lib-js-webpack-target', defaultPreset) + await project.write('src/a-library.js', ` + export default { + foo: 'bar' + } + `) + + await project.write('src/main.js', ` + export * from 'a-library' + `) + + await project.write('vue.config.js', ` + const path = require('path') + module.exports = { + configureWebpack: config => { + config.resolve.alias['a-library'] = path.resolve(__dirname, 'src', 'a-library.js') + + if (config.output.libraryTarget === 'umd') { + return + } + + config.externals = ['a-library'] + } + } + `) + + const { stdout } = await project.run('vue-cli-service build --target lib --name testLib src/main.js') + expect(stdout).toMatch('Build complete.') + + expect(project.has('dist/testLib.umd.js')).toBe(true) + expect(project.has('dist/testLib.common.js')).toBe(true) + + const umdContent = await project.read('dist/testLib.umd.js') + expect(umdContent).toContain(`foo: 'bar'`) + + const commonContent = await project.read('dist/testLib.common.js') + expect(commonContent).not.toContain(`foo: 'bar'`) +}) diff --git a/packages/@vue/cli-service/lib/commands/build/resolveLibConfig.js b/packages/@vue/cli-service/lib/commands/build/resolveLibConfig.js index 201079079..4b772ec63 100644 --- a/packages/@vue/cli-service/lib/commands/build/resolveLibConfig.js +++ b/packages/@vue/cli-service/lib/commands/build/resolveLibConfig.js @@ -75,6 +75,9 @@ module.exports = (api, { entry, name }, options) => { .alias .set('~entry', fullEntryPath) + // set output target before user configureWebpack hooks are applied + config.output.libraryTarget(format) + // set entry/output after user configureWebpack hooks are applied const rawConfig = api.resolveWebpackConfig(config)