init
This commit is contained in:
66
node_modules/@dcloudio/uni-h5/lib/rollup-plugin-require-context/src/helper/extract-args.js
generated
vendored
Normal file
66
node_modules/@dcloudio/uni-h5/lib/rollup-plugin-require-context/src/helper/extract-args.js
generated
vendored
Normal file
@@ -0,0 +1,66 @@
|
||||
const Path = require('path')
|
||||
const { parse } = require('acorn')
|
||||
const walk = require('acorn-walk')
|
||||
|
||||
function stripHeadAndTailChar (str) {
|
||||
return str.substring(1, str.length - 1)
|
||||
}
|
||||
|
||||
function extract (code) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const ast = parse(code, {
|
||||
sourceType: 'module'
|
||||
})
|
||||
const res = []
|
||||
walk.simple(ast, {
|
||||
CallExpression (node) {
|
||||
const {
|
||||
start,
|
||||
end,
|
||||
callee,
|
||||
arguments: argNodes
|
||||
} = node
|
||||
let args = []
|
||||
if (
|
||||
callee.type === 'MemberExpression' &&
|
||||
callee.object.name === 'require' &&
|
||||
callee.property.name === 'context'
|
||||
) {
|
||||
args = argNodes.map(a => a.value)
|
||||
res.push({
|
||||
start,
|
||||
end,
|
||||
args
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
resolve(res)
|
||||
})
|
||||
}
|
||||
|
||||
module.exports = async function extractArgs (code, baseDirname) {
|
||||
const data = await extract(code)
|
||||
|
||||
return data.map(r => {
|
||||
const { start, end, args } = r
|
||||
const [
|
||||
rawDirname = '',
|
||||
rawRecursive,
|
||||
rawRegexp
|
||||
] = args
|
||||
|
||||
const dirname = Path.join(baseDirname, rawDirname)
|
||||
const recursive = rawRecursive
|
||||
const regexp = rawRegexp
|
||||
|
||||
return {
|
||||
dirname,
|
||||
recursive,
|
||||
regexp,
|
||||
start,
|
||||
end
|
||||
}
|
||||
})
|
||||
}
|
||||
36
node_modules/@dcloudio/uni-h5/lib/rollup-plugin-require-context/src/helper/generate-require-context-code.js
generated
vendored
Normal file
36
node_modules/@dcloudio/uni-h5/lib/rollup-plugin-require-context/src/helper/generate-require-context-code.js
generated
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
const Path = require('path')
|
||||
const extractArgs = require('./extract-args')
|
||||
const resolveRequireModules = require('./resolve-reqquire-modules')
|
||||
const resolveRequireCode = require('./resolve-require-code')
|
||||
|
||||
module.exports = async function gernerateRequireContextCode (id, code) {
|
||||
const currentCodeDirname = Path.dirname(id)
|
||||
const data = await extractArgs(code, currentCodeDirname)
|
||||
let head = ''
|
||||
|
||||
const body = data.reduceRight((res, r) => {
|
||||
const {
|
||||
start, end,
|
||||
dirname, recursive, regexp
|
||||
} = r
|
||||
const modules = resolveRequireModules(dirname, recursive, regexp)
|
||||
const moduleCode = resolveRequireCode(dirname, modules)
|
||||
const {
|
||||
importCode,
|
||||
requireFnCode
|
||||
} = moduleCode
|
||||
|
||||
head += importCode
|
||||
res = [
|
||||
res.slice(0, start),
|
||||
requireFnCode,
|
||||
res.slice(end)
|
||||
].join('')
|
||||
return res
|
||||
}, code)
|
||||
|
||||
return [
|
||||
head,
|
||||
body
|
||||
].join('\n')
|
||||
}
|
||||
3
node_modules/@dcloudio/uni-h5/lib/rollup-plugin-require-context/src/helper/has-require-context.js
generated
vendored
Normal file
3
node_modules/@dcloudio/uni-h5/lib/rollup-plugin-require-context/src/helper/has-require-context.js
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
module.exports = function hasRequireContext (code) {
|
||||
return /require\.context/g.test(code)
|
||||
}
|
||||
36
node_modules/@dcloudio/uni-h5/lib/rollup-plugin-require-context/src/helper/resolve-reqquire-modules.js
generated
vendored
Normal file
36
node_modules/@dcloudio/uni-h5/lib/rollup-plugin-require-context/src/helper/resolve-reqquire-modules.js
generated
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
const fs = require('fs')
|
||||
const Path = require('path')
|
||||
|
||||
function readDirRecursive (dir) {
|
||||
return fs.statSync(dir).isDirectory()
|
||||
? Array.prototype.concat(
|
||||
...fs.readdirSync(dir).map(f => readDirRecursive(Path.join(dir, f)))
|
||||
)
|
||||
: dir
|
||||
}
|
||||
|
||||
function readDir (dir, recursive) {
|
||||
const isDirectory = fs.statSync(dir).isDirectory()
|
||||
if (recursive) {
|
||||
return readDirRecursive(dir)
|
||||
} else if (isDirectory) {
|
||||
const files = fs.readdirSync(dir)
|
||||
if (files) {
|
||||
return files.map(file => Path.resolve(dir, file))
|
||||
}
|
||||
} else {
|
||||
return [ dir ]
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = function resolveRequireModules (baseDirname = './', recursive = false, regexp = /^\.\//) {
|
||||
let files = readDir(baseDirname, recursive)
|
||||
if (!Array.isArray(files)) {
|
||||
files = [files]
|
||||
}
|
||||
files = files.map(file => {
|
||||
const fileAbsolutePath = `./${Path.relative(baseDirname, file)}`
|
||||
return fileAbsolutePath
|
||||
})
|
||||
return files.filter(file => regexp.test(file.replace(/\\/g, '/')))
|
||||
}
|
||||
48
node_modules/@dcloudio/uni-h5/lib/rollup-plugin-require-context/src/helper/resolve-require-code.js
generated
vendored
Normal file
48
node_modules/@dcloudio/uni-h5/lib/rollup-plugin-require-context/src/helper/resolve-require-code.js
generated
vendored
Normal file
@@ -0,0 +1,48 @@
|
||||
const Path = require('path')
|
||||
|
||||
let uid = 0
|
||||
|
||||
function getUID () {
|
||||
return uid++
|
||||
}
|
||||
|
||||
function genImportCode (name, path) {
|
||||
return `import * as ${name} from '${path}';\n`
|
||||
}
|
||||
|
||||
function genPropsCode (key, value) {
|
||||
return `'${key}': ${value},\n`
|
||||
}
|
||||
|
||||
module.exports = function genRequireCode (baseDirname, modules) {
|
||||
const uid = getUID()
|
||||
let importCode = ''
|
||||
let moduleProps = ''
|
||||
|
||||
modules.forEach((file, index) => {
|
||||
const moduleName = `require_context_module_${uid}_${index}`
|
||||
|
||||
const moduleAbsolutePath = Path.resolve(baseDirname, file).replace(/\\/g, '/')
|
||||
importCode += genImportCode(moduleName, moduleAbsolutePath)
|
||||
moduleProps += genPropsCode(file.replace(/\\/g, '/'), moduleName)
|
||||
})
|
||||
const requireFnCode = (`
|
||||
(function() {
|
||||
var map = {
|
||||
${moduleProps}
|
||||
};
|
||||
var req = function req(key) {
|
||||
return map[key] || (function() { throw new Error("Cannot find module '" + key + "'.") }());
|
||||
}
|
||||
req.keys = function() {
|
||||
return Object.keys(map);
|
||||
}
|
||||
return req;
|
||||
})()
|
||||
`)
|
||||
|
||||
return {
|
||||
importCode,
|
||||
requireFnCode
|
||||
}
|
||||
}
|
||||
17
node_modules/@dcloudio/uni-h5/lib/rollup-plugin-require-context/src/index.js
generated
vendored
Normal file
17
node_modules/@dcloudio/uni-h5/lib/rollup-plugin-require-context/src/index.js
generated
vendored
Normal file
@@ -0,0 +1,17 @@
|
||||
const _ = require('rollup-pluginutils')
|
||||
const hasRequireContext = require('./helper/has-require-context')
|
||||
const gernerateRequireContextCode = require('./helper/generate-require-context-code')
|
||||
|
||||
module.exports = function plugin (options = {}) {
|
||||
const filter = _.createFilter(options.include || ['**/*.js'], options.exclude || 'node_modules/**')
|
||||
return {
|
||||
name: 'require_content',
|
||||
async transform (code, id) {
|
||||
if (!filter(id) || !hasRequireContext(code)) {
|
||||
return
|
||||
}
|
||||
code = await gernerateRequireContextCode(id, code)
|
||||
return code
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user