Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
} else {
return !!filepath.match(dep)
}
})) {
return false
}
// Don't transpile node_modules
return /node_modules/.test(filepath)
})
.end()
.use('cache-loader')
.loader('cache-loader')
.options(api.genCacheConfig('babel-loader', {
'@babel/core': require('@babel/core/package.json').version,
'@nodepack/babel-preset-nodepack': require('@nodepack/babel-preset-nodepack/package.json').version,
'babel-loader': require('babel-loader/package.json').version,
}, [
'babel.config.js',
]))
.end()
if (useThreads) {
jsRule
.use('thread-loader')
.loader('thread-loader')
}
jsRule
.use('babel-loader')
.loader('babel-loader')
.options(babelOptions)
})
}
// check if this is something the user explicitly wants to transpile
if (transpileDepRegex && transpileDepRegex.test(filepath)) {
return false
}
// Don't transpile node_modules
return /node_modules/.test(filepath)
})
.end()
.use('cache-loader')
.loader(require.resolve('cache-loader'))
.options(api.genCacheConfig('babel-loader', {
'@babel/core': require('@babel/core/package.json').version,
'@vue/babel-preset-app': require('@vue/babel-preset-app/package.json').version,
'babel-loader': require('babel-loader/package.json').version,
modern: !!process.env.VUE_CLI_MODERN_BUILD,
browserslist: api.service.pkg.browserslist
}, [
'babel.config.js',
'.browserslistrc'
]))
.end()
if (useThreads) {
const threadLoaderConfig = jsRule
.use('thread-loader')
.loader(require.resolve('thread-loader'))
if (typeof options.parallel === 'number') {
threadLoaderConfig.options({ workers: options.parallel })
}
/* eslint import/no-extraneous-dependencies:0 */
const fs = require('fs')
const marked = require('marked')
const renderer = new marked.Renderer()
const {LOCALE} = process.env
renderer.heading = (text, level) => {
const escapedText = text.toLowerCase().replace(/[^\w]+/g, '-')
return `<a href="#${escapedText}" name="${escapedText}">${text}</a>`
}
const cacheIdentifier = JSON.stringify({
'babel-loader': require('babel-loader/package.json').version,
'babel-core': require('babel-core/package.json').version,
babelrc: fs.readFileSync('./.babelrc', 'utf8'),
env: process.env.BABEL_ENV || process.env.NODE_ENV || 'development',
locale: process.env.LOCALE,
})
module.exports = {
distDir: `dist/${LOCALE || 'dev'}`,
webpack: config => {
config.module.rules.forEach(rule => {
if (rule.loader === 'babel-loader') {
if (process.env.DISABLE_CACHE) {
rule.options.cacheDirectory = false
} else {
rule.options.cacheIdentifier = cacheIdentifier
}
function createCacheIdentifier({ urc, babelConfig = '' }) {
return JSON.stringify({
'babel-loader': require('babel-loader/package.json').version,
'@babel/core': require('@babel/core/package.json').version,
'babel-preset-mapbox': require('@mapbox/babel-preset-mapbox').version,
babelConfig,
env: process.env.BABEL_ENV || process.env.NODE_ENV || 'development',
// Use `browserslist` module to do finding of the config and parse it.
// Note, this would also work when a user uses `urc.browserslist`
// since we would set it as env var `BROWSERSLIST` and `browserslist`
// module will then read it.
browserslist: browserslist(null, {
path: urc.rootDirectory,
env: process.env.NODE_ENV === 'production' ? 'production' : 'development'
})
});
}
// Support for js, jsx, ts and tsx files.
test: /\.(j|t)sx?$/,
use: {
loader: "babel-loader",
options: {
// Don't use the babelrc file of the root.
babelrc: false,
// This is a feature of `babel-loader` for webpack (not Babel itself).
// It enables caching results in ./node_modules/.cache/babel-loader/
// directory for faster rebuilds.
cacheDirectory: true,
// A unique hash using @babel/core's version, the babel-loader's version,
// and the contents of babel.
cacheIdentifier: hash({
babelCoreVersion: babelCore.version,
babelLoaderVersion: babelLoader.version,
babel: babel
}),
// Instead, use the babel options directly from our babel object.
...babel[target]
}
}
},
{
test: /\.(png|jpe?g|gif|svg)$/,
use: [
{
loader: "file-loader",
options: {
name: (file: string): string => {
const filename = /([^/\\]+)\.(?:png|jpe?g|gif|svg)$/.exec(
file
const babelrcPath = path.join(urc.rootDirectory, '.babelrc');
const exists = fs.existsSync(babelrcPath);
const loader = {
loader: require.resolve('babel-loader'),
options: {
presets: [require('../../packages/babel-preset-mapbox')],
babelrc: false,
compact: false,
cacheDirectory: true,
cacheCompression: urc.production,
// `babel-preset-mapbox` depends on the `process.env.BROWSERSLIST` and
// any change in its value would fail to change the default `cacheIdentifier` of `babel-loader`
// hence leading to stale babel output. To mitigate this we need to create a more accurate `cacheIdentifier`
// which is (`defaultCacheIdentifier` + `urc.browserslist`) ref: https://github.com/babel/babel-loader/blob/7.x/src/index.js#L129
cacheIdentifier: JSON.stringify({
'babel-loader': require('babel-loader/package.json').version,
'babel-core': require('babel-core/package.json').version,
babelrc: exists ? fs.readFileSync(babelrcPath, 'utf8') : '',
env: process.env.BABEL_ENV || process.env.NODE_ENV || 'development',
browserslist: urc.browserslist
})
}
};
if (exists) {
delete loader.options.presets;
loader.options.babelrc = true;
}
return loader;
}