mirror of
https://github.com/nuxt/nuxt.git
synced 2025-02-11 19:28:05 +00:00
Merge pull request #3341 from clarkdo/babel_whitelisting
feat: make babel-loader exclude configurable
This commit is contained in:
commit
3a76475ace
@ -139,10 +139,18 @@ export default class WebpackBaseConfig {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
test: /\.jsx?$/,
|
test: /\.jsx?$/,
|
||||||
exclude: file => (
|
exclude: file => {
|
||||||
/node_modules/.test(file) &&
|
// not exclude files outside node_modules
|
||||||
!/\.vue\.js/.test(file)
|
if (/node_modules/.test(file)) {
|
||||||
),
|
for (let pkg of this.options.build.transpile) {
|
||||||
|
// item in transpile can be string or regex object
|
||||||
|
if (new RegExp(pkg).test(file)) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
},
|
||||||
use: perfLoader.pool('js', {
|
use: perfLoader.pool('js', {
|
||||||
loader: 'babel-loader',
|
loader: 'babel-loader',
|
||||||
options: this.getBabelOptions()
|
options: this.getBabelOptions()
|
||||||
|
@ -63,6 +63,7 @@ export default {
|
|||||||
babelrc: false,
|
babelrc: false,
|
||||||
cacheDirectory: undefined
|
cacheDirectory: undefined
|
||||||
},
|
},
|
||||||
|
transpile: [], // Name of NPM packages to be transpiled
|
||||||
vueLoader: {},
|
vueLoader: {},
|
||||||
postcss: {},
|
postcss: {},
|
||||||
templates: [],
|
templates: [],
|
||||||
|
@ -187,5 +187,9 @@ Options.from = function (_options) {
|
|||||||
if (options.dev) {
|
if (options.dev) {
|
||||||
options.build.extractCSS = false
|
options.build.extractCSS = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// include SFCs in node_modules
|
||||||
|
options.build.transpile = [/\.vue\.js/].concat(options.build.transpile || [])
|
||||||
|
|
||||||
return options
|
return options
|
||||||
}
|
}
|
||||||
|
1
test/fixtures/with-config/nuxt.config.js
vendored
1
test/fixtures/with-config/nuxt.config.js
vendored
@ -62,6 +62,7 @@ export default {
|
|||||||
return null // Coverage: Return null, so defaults will be used.
|
return null // Coverage: Return null, so defaults will be used.
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
transpile: 'vue-test',
|
||||||
extend(config, options) {
|
extend(config, options) {
|
||||||
return Object.assign({}, config, {
|
return Object.assign({}, config, {
|
||||||
devtool: 'nosources-source-map'
|
devtool: 'nosources-source-map'
|
||||||
|
@ -4,6 +4,7 @@ let port
|
|||||||
const url = route => 'http://localhost:' + port + route
|
const url = route => 'http://localhost:' + port + route
|
||||||
|
|
||||||
let nuxt = null
|
let nuxt = null
|
||||||
|
let transpile = null
|
||||||
|
|
||||||
describe('basic dev', () => {
|
describe('basic dev', () => {
|
||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
@ -12,23 +13,32 @@ describe('basic dev', () => {
|
|||||||
debug: true,
|
debug: true,
|
||||||
buildDir: '.nuxt-dev',
|
buildDir: '.nuxt-dev',
|
||||||
build: {
|
build: {
|
||||||
stats: 'none'
|
stats: 'none',
|
||||||
|
transpile: [
|
||||||
|
'vue\\.test\\.js',
|
||||||
|
/vue-test/
|
||||||
|
],
|
||||||
|
extend({ module: { rules } }, { isClient }) {
|
||||||
|
if (isClient) {
|
||||||
|
const babelLoader = rules.find(loader => loader.test.test('.jsx'))
|
||||||
|
transpile = (file) => !babelLoader.exclude(file)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
nuxt = new Nuxt(config)
|
nuxt = new Nuxt(config)
|
||||||
new Builder(nuxt).build()
|
await new Builder(nuxt).build()
|
||||||
port = await getPort()
|
port = await getPort()
|
||||||
await nuxt.listen(port, 'localhost')
|
await nuxt.listen(port, 'localhost')
|
||||||
})
|
})
|
||||||
|
|
||||||
// TODO: enable test when style-loader.js:60 was resolved
|
test('Config: build.transpile', async () => {
|
||||||
// test.serial('/extractCSS', async t => {
|
expect(transpile('vue-test')).toBe(true)
|
||||||
// const window = await nuxt.renderAndGetWindow(url('/extractCSS'))
|
expect(transpile('node_modules/test.js')).toBe(false)
|
||||||
// const html = window.document.head.innerHTML
|
expect(transpile('node_modules/vue-test')).toBe(true)
|
||||||
// t.true(html.includes('vendor.css'))
|
expect(transpile('node_modules/vue.test.js')).toBe(true)
|
||||||
// t.true(!html.includes('30px'))
|
expect(transpile('node_modules/test.vue.js')).toBe(true)
|
||||||
// t.is(window.getComputedStyle(window.document.body).getPropertyValue('font-size'), '30px')
|
})
|
||||||
// })
|
|
||||||
|
|
||||||
test('/stateless', async () => {
|
test('/stateless', async () => {
|
||||||
const window = await nuxt.renderAndGetWindow(url('/stateless'))
|
const window = await nuxt.renderAndGetWindow(url('/stateless'))
|
||||||
|
Loading…
Reference in New Issue
Block a user