fix(builder): add lodash inside templates (#4368)

This commit is contained in:
Pooya Parsa 2018-11-20 12:51:17 +03:30
parent 33bd40f154
commit cebed3509f
3 changed files with 38 additions and 15 deletions

View File

@ -429,6 +429,33 @@ export default class Builder {
resolve: r resolve: r
}) })
// Prepare template options
let lodash = null
const templateOptions = {
imports: {
serialize,
devalue,
hash,
r,
wp,
wChunk,
resolvePath: this.nuxt.resolver.resolvePath,
resolveAlias: this.nuxt.resolver.resolveAlias,
relativeToBuild: this.relativeToBuild,
// Legacy support: https://github.com/nuxt/nuxt.js/issues/4350
_: new Proxy({}, {
get(target, prop) {
if (!lodash) {
consola.warn('Avoid using _ inside templates')
lodash = require('lodash')
}
return lodash[prop]
}
})
},
interpolate: /<%=([\s\S]+?)%>/g
}
// Interpret and move template files to .nuxt/ // Interpret and move template files to .nuxt/
await Promise.all( await Promise.all(
templatesFiles.map(async ({ src, dst, options, custom }) => { templatesFiles.map(async ({ src, dst, options, custom }) => {
@ -438,20 +465,7 @@ export default class Builder {
const fileContent = await fsExtra.readFile(src, 'utf8') const fileContent = await fsExtra.readFile(src, 'utf8')
let content let content
try { try {
const templateFunction = template(fileContent, { const templateFunction = template(fileContent, templateOptions)
imports: {
serialize,
devalue,
hash,
r,
wp,
wChunk,
resolvePath: this.nuxt.resolver.resolvePath,
resolveAlias: this.nuxt.resolver.resolveAlias,
relativeToBuild: this.relativeToBuild
},
interpolate: /<%=([\s\S]+?)%>/g
})
content = stripWhitespace( content = stripWhitespace(
templateFunction( templateFunction(
Object.assign({}, templateVars, { Object.assign({}, templateVars, {

View File

@ -9,3 +9,6 @@ function $reverseStr(str) {
Vue.prototype.$reverseStr = $reverseStr Vue.prototype.$reverseStr = $reverseStr
export default undefined export default undefined
// Legacy support: https://github.com/nuxt/nuxt.js/issues/4350
// <%= _.toUpper('foo') %>

View File

@ -1,6 +1,6 @@
import { normalize } from 'path' import { normalize } from 'path'
import consola from 'consola' import consola from 'consola'
import { loadFixture, getPort, Nuxt, rp } from '../utils' import { loadFixture, getPort, Nuxt, Builder, rp } from '../utils'
let port let port
const url = route => 'http://localhost:' + port + route const url = route => 'http://localhost:' + port + route
@ -69,6 +69,12 @@ describe('module', () => {
expect(consola.warn).toHaveBeenCalledWith('addVendor has been deprecated due to webpack4 optimization') expect(consola.warn).toHaveBeenCalledWith('addVendor has been deprecated due to webpack4 optimization')
}) })
test('Lodash - deprecated', async () => {
const builder = new Builder(nuxt)
await builder.generateRoutesAndFiles()
expect(consola.warn).toHaveBeenCalledWith('Avoid using _ inside templates')
})
// Close server and ask nuxt to stop listening to file changes // Close server and ask nuxt to stop listening to file changes
afterAll(async () => { afterAll(async () => {
await nuxt.close() await nuxt.close()