vite-plugin-fast-external
Advanced tools
Comparing version 1.0.2 to 1.2.0
@@ -13,44 +13,28 @@ "use strict"; | ||
const node_modules = path_1.default.join(root, 'node_modules'); | ||
const viteExternal = '.vite-plugin-fast-external'; | ||
const viteExternalId = '.vite-plugin-fast-external'; | ||
return { | ||
name: 'vite-plugin-fast-external', | ||
config(config) { | ||
var _a, _b, _c; | ||
// ensure viteExternal exist | ||
const externalDir = path_1.default.join(node_modules, viteExternal); | ||
const externalDir = path_1.default.join(node_modules, viteExternalId); | ||
fs_1.default.existsSync(externalDir) || fs_1.default.mkdirSync(externalDir); | ||
// generate external module file. | ||
for (const [mod, iifeName] of Object.entries(externals)) { | ||
const modFilename = path_1.default.join(node_modules, viteExternal, `${mod}.js`); | ||
const modFilename = path_1.default.join(node_modules, viteExternalId, `${mod}.js`); | ||
if (!fs_1.default.existsSync(modFilename)) { | ||
// for '@scope/name' package | ||
ensureDir(path_1.default.parse(modFilename).dir); | ||
const modContent = (options === null || options === void 0 ? void 0 : options.format) === 'cjs' | ||
? `const ${mod} = window['${iifeName}']; module.exports = ${mod};` | ||
: `const ${mod} = window['${iifeName}']; export { ${mod} as default }`; | ||
? `const ${iifeName} = window['${iifeName}']; module.exports = ${iifeName};` | ||
: `const ${iifeName} = window['${iifeName}']; export { ${iifeName} as default }`; | ||
fs_1.default.writeFileSync(modFilename, modContent); | ||
} | ||
} | ||
// merge external module to alias | ||
const withExternalsAlias = Object.keys(externals).map(key => ({ | ||
find: key, | ||
// splice node_modules prefix for third party package.jon correct resolved | ||
// eg: element-ui | ||
replacement: `node_modules/${viteExternal}/${key}.js`, | ||
})); | ||
const alias = (_b = (_a = config.resolve) === null || _a === void 0 ? void 0 : _a.alias) !== null && _b !== void 0 ? _b : {}; | ||
if (Object.prototype.toString.call(alias) === '[object Object]') { | ||
for (const [find, replacement] of Object.entries(alias)) { | ||
withExternalsAlias.push({ find, replacement }); | ||
} | ||
} | ||
else if (Array.isArray(alias)) { | ||
withExternalsAlias.push(...alias); | ||
} | ||
config.resolve = { | ||
...((_c = config.resolve) !== null && _c !== void 0 ? _c : {}), | ||
alias: withExternalsAlias, | ||
}; | ||
}, | ||
load(id) { | ||
if (id.includes(viteExternal)) { | ||
const modFilename = path_1.default.join(root, id); | ||
const url = cleanUrl(id); | ||
const parsed = path_1.default.parse(url); | ||
const external = Object.entries(externals).find(([name]) => url.includes('node_modules') && parsed.name === name); | ||
if (external) { | ||
const modFilename = path_1.default.join(node_modules, viteExternalId, parsed.base); | ||
return modCache[modFilename] || (modCache[modFilename] = fs_1.default.readFileSync(modFilename, 'utf8')); | ||
@@ -62,2 +46,16 @@ } | ||
exports.external = external; | ||
function ensureDir(dir) { | ||
try { | ||
fs_1.default.statSync(dir).isDirectory(); | ||
} | ||
catch (error) { | ||
fs_1.default.mkdirSync(dir, { recursive: true }); | ||
} | ||
return dir; | ||
} | ||
function cleanUrl(url) { | ||
const queryRE = /\?.*$/s; | ||
const hashRE = /#.*$/s; | ||
return url.replace(hashRE, '').replace(queryRE, ''); | ||
} | ||
exports.default = external; |
{ | ||
"name": "vite-plugin-fast-external", | ||
"version": "1.0.2", | ||
"description": "An tiny and fast external for vite plugin.", | ||
"version": "1.2.0", | ||
"description": "An tiny and fast external plugin for vite.", | ||
"main": "dist/index.js", | ||
@@ -24,3 +24,8 @@ "repository": "https://github.com/caoxiemeihao/vite-plugins/tree/main/packages/fast-external", | ||
"README.md" | ||
], | ||
"keywords": [ | ||
"vite", | ||
"external", | ||
"vite-plugin-external" | ||
] | ||
} |
import fs from 'fs' | ||
import path from 'path' | ||
import { Alias, Plugin as VitePlugin } from 'vite' | ||
import { Plugin as VitePlugin } from 'vite' | ||
@@ -19,3 +19,3 @@ export function external( | ||
const node_modules = path.join(root, 'node_modules') | ||
const viteExternal = '.vite-plugin-fast-external' | ||
const viteExternalId = '.vite-plugin-fast-external' | ||
@@ -26,3 +26,3 @@ return { | ||
// ensure viteExternal exist | ||
const externalDir = path.join(node_modules, viteExternal) | ||
const externalDir = path.join(node_modules, viteExternalId) | ||
fs.existsSync(externalDir) || fs.mkdirSync(externalDir) | ||
@@ -32,35 +32,21 @@ | ||
for (const [mod, iifeName] of Object.entries(externals)) { | ||
const modFilename = path.join(node_modules, viteExternal, `${mod}.js`) | ||
const modFilename = path.join(node_modules, viteExternalId, `${mod}.js`) | ||
if (!fs.existsSync(modFilename)) { | ||
// for '@scope/name' package | ||
ensureDir(path.parse(modFilename).dir) | ||
const modContent = options?.format === 'cjs' | ||
? `const ${mod} = window['${iifeName}']; module.exports = ${mod};` | ||
: `const ${mod} = window['${iifeName}']; export { ${mod} as default }` | ||
? `const ${iifeName} = window['${iifeName}']; module.exports = ${iifeName};` | ||
: `const ${iifeName} = window['${iifeName}']; export { ${iifeName} as default }` | ||
fs.writeFileSync(modFilename, modContent) | ||
} | ||
} | ||
// merge external module to alias | ||
const withExternalsAlias: Alias[] = Object.keys(externals).map(key => ({ | ||
find: key, | ||
// splice node_modules prefix for third party package.jon correct resolved | ||
// eg: element-ui | ||
replacement: `node_modules/${viteExternal}/${key}.js`, | ||
})) | ||
const alias = config.resolve?.alias ?? {} | ||
if (Object.prototype.toString.call(alias) === '[object Object]') { | ||
for (const [find, replacement] of Object.entries(alias)) { | ||
withExternalsAlias.push({ find, replacement }) | ||
} | ||
} else if (Array.isArray(alias)) { | ||
withExternalsAlias.push(...alias) | ||
} | ||
config.resolve = { | ||
...(config.resolve ?? {}), | ||
alias: withExternalsAlias, | ||
} | ||
}, | ||
load(id) { | ||
if (id.includes(viteExternal)) { | ||
const modFilename = path.join(root, id) | ||
const url = cleanUrl(id) | ||
const parsed = path.parse(url) | ||
const external = Object.entries(externals).find(([name]) => url.includes('node_modules') && parsed.name === name) | ||
if (external) { | ||
const modFilename = path.join(node_modules, viteExternalId, parsed.base) | ||
@@ -73,2 +59,17 @@ return modCache[modFilename] || (modCache[modFilename] = fs.readFileSync(modFilename, 'utf8')) | ||
function ensureDir(dir: string) { | ||
try { | ||
fs.statSync(dir).isDirectory() | ||
} catch (error) { | ||
fs.mkdirSync(dir, { recursive: true }) | ||
} | ||
return dir | ||
} | ||
function cleanUrl(url: string) { | ||
const queryRE = /\?.*$/s | ||
const hashRE = /#.*$/s | ||
return url.replace(hashRE, '').replace(queryRE, '') | ||
} | ||
export default external |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
8079
147