Socket
Socket
Sign inDemoInstall

vite-plugin-resolve

Package Overview
Dependencies
Maintainers
1
Versions
43
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

vite-plugin-resolve - npm Package Compare versions

Comparing version 1.0.1 to 1.2.0

2

package.json
{
"name": "vite-plugin-resolve",
"version": "1.0.1",
"version": "1.2.0",
"description": "Custom resolve code for vite",

@@ -5,0 +5,0 @@ "main": "src/index.js",

# vite-plugin-resolve
[![npm package](https://nodei.co/npm/vite-plugin-resolve.png?downloads=true&downloadRank=true&stars=true)](https://www.npmjs.com/package/vite-plugin-resolve)
<br/>
[![NPM version](https://img.shields.io/npm/v/vite-plugin-resolve.svg?style=flat)](https://npmjs.org/package/vite-plugin-resolve)

@@ -22,6 +23,8 @@ [![NPM Downloads](https://img.shields.io/npm/dm/vite-plugin-resolve.svg?style=flat)](https://npmjs.org/package/vite-plugin-resolve)

viteResolve({
// use string in web
// use code string
vue: `const vue = window.Vue; export default vue;`,
// use nested module and function to return code string
'@scope/name': () => `const Lib = window.LibraryName; export default Lib;`,
// use function to return string in electron
electron: () => `const electron = require('electron'); export default electron;`,
'electron-store': () => `const Store = require('electron-store'); export default Store;`,
})

@@ -31,1 +34,19 @@ ]

```
## How to work
1. Resolve-module will be generated code into `node_modules/.vite-plugin-resolve/xxxx.js`
2. Append an resolve-module into alias
```js
{
resolve: {
alias: [
{
find: 'vue',
replacement: 'User/work-directory/node_modules/.vite-plugin-resolve/vue.js',
},
],
},
}
```

@@ -0,5 +1,11 @@

const fs = require('fs');
const path = require('path');
/**
* Custo m resolve code for vite
* @type {(external: Record<string, string | () => string>) => import('vite').Plugin}
* @typedef {{(dict: Record<string, string | () => string>) => import('vite').Plugin}} ViteResolve
*/
/**
* Custom resolve code for vite
* @type {ViteResolve}
* @example

@@ -9,6 +15,8 @@ * export default defineConfig({

* viteResolve({
* // use string
* // use code string
* vue: `const vue = window.Vue; export default vue;`,
* // use function to return string
* vuex: () => `const vuex = window.Vuex; export default Vuex;`,
* // use nested module and function to return code string
* '@scope/name': () => `const Lib = window.LibraryName; export default Lib;`,
* // use function to return string in electron
* 'electron-store': () => `const Store = require('electron-store'); export default Store;`,
* })

@@ -18,19 +26,102 @@ * ]

*/
function viteResolve(external = {}) {
module.exports = function (dict = {}) {
let root = process.cwd();
const resolvePluginDirectory = '.vite-plugin-resolve';
return {
name: 'vite-plugin-resolve',
enforce: 'pre',
resolveId(id) {
if (external[id]) {
return id
config(config) {
// init root path
if (config.root && path.isAbsolute(config.root)) {
// TODO: config.root is relative path
root = config.root;
}
// step-1
generateReolveFile(
root,
resolvePluginDirectory,
dict
);
// step-2
rewriteAlias(
config,
root,
resolvePluginDirectory,
dict
);
},
load(id) {
if (external[id]) {
return typeof external[id] === 'function' ? external[id]() : external[id]
}
},
}
}
module.exports = viteResolve
function generateReolveFile(
root,
directory,
resolveDict
) {
const dir = path.join(node_modules(root), directory);
// ensure .vite-plugin-resolve directory existed
fs.existsSync(dir) || fs.mkdirSync(dir);
// generate external module file
for (const [module, strOrFn] of Object.entries(resolveDict)) {
const moduleId = path.join(dir, module + '.js');
if (!fs.existsSync(moduleId)) {
// for '@scope/name' module
ensureDir(path.parse(moduleId).dir);
const moduleContent = typeof strOrFn === 'function' ? strOrFn() : strOrFn;
fs.writeFileSync(moduleId, moduleContent);
}
}
}
function rewriteAlias(
config,
root,
directory,
resolveDict
) {
if (!config.resolve) {
config.resolve = {};
}
let alias = config.resolve.alias || {};
if (!Array.isArray(alias)) {
alias = Object.entries(alias).map(([k, v]) => ({ find: k, replacement: v }));
}
Object.keys(resolveDict).forEach(k => {
// redirect resolve module to `node_modules/.vite-plugin-resolve` directory
alias.push({ find: k, replacement: path.join(node_modules(root), directory, k) });
});
config.resolve.alias = alias;
}
function node_modules(root, count = 0) {
if (node_modules.p) {
return node_modules.p;
}
const p = path.join(root, 'node_modules');
if (fs.existsSync(p)) {
return node_modules.p = p;
}
if (count >= 19) {
throw new Error('Can not found node_modules directory.');
}
return node_modules(path.join(root, '..'), count + 1);
}
function ensureDir(dir) {
try {
fs.statSync(dir).isDirectory();
} catch (error) {
fs.mkdirSync(dir, { recursive: true });
}
return dir;
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc