@farris/cli 1.0.27 → 2.0.0-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/index.js +2 -0
- package/lib/commands/build-components.js +36 -0
- package/lib/commands/build-css.js +11 -0
- package/lib/commands/build-lib.js +16 -0
- package/lib/commands/build.js +10 -0
- package/lib/commands/create-app.js +54 -0
- package/lib/commands/dev-serve.js +23 -0
- package/lib/commands/preview-serve.js +16 -0
- package/lib/common/constant.js +18 -0
- package/lib/common/generate-app.js +44 -0
- package/lib/common/get-dependencies.js +9 -0
- package/lib/common/get-farris-config.js +11 -0
- package/lib/common/get-version.js +6 -0
- package/lib/common/get-vite-config.js +38 -0
- package/lib/config/vite-app.js +14 -0
- package/lib/config/vite-lib.js +35 -0
- package/lib/index.js +54 -0
- package/lib/plugins/dts.js +8 -0
- package/lib/plugins/gen-component-style.js +43 -0
- package/lib/plugins/html-system.js +11 -0
- package/lib/plugins/replace.js +13 -0
- package/package.json +30 -18
- package/templates/lib/.eslintrc.cjs +15 -0
- package/templates/lib/.prettierrc.json +8 -0
- package/templates/lib/farris.config.mjs +35 -0
- package/templates/lib/index.html +12 -0
- package/templates/lib/package.json +29 -0
- package/templates/lib/packages/button/src/index.vue +4 -0
- package/templates/lib/packages/index.ts +7 -0
- package/templates/lib/src/App.vue +5 -0
- package/templates/lib/src/main.ts +9 -0
- package/templates/lib/tsconfig.json +18 -0
- package/templates/mobile/.eslintrc.cjs +15 -0
- package/templates/mobile/.prettierrc.json +8 -0
- package/templates/mobile/farris.config.mjs +24 -0
- package/templates/mobile/index.html +12 -0
- package/templates/mobile/package.json +29 -0
- package/templates/mobile/src/App.vue +80 -0
- package/templates/mobile/src/components/TheButton.vue +3 -0
- package/templates/mobile/src/main.ts +12 -0
- package/templates/mobile/src/router/index.ts +23 -0
- package/templates/mobile/src/views/AboutView.vue +15 -0
- package/templates/mobile/src/views/HomeView.vue +9 -0
- package/templates/mobile/tsconfig.json +18 -0
- package/README.md +0 -2
- package/ci/cli.js +0 -542
package/bin/index.js
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
import { readdirSync, lstatSync } from "node:fs";
|
2
|
+
import { resolve } from "node:path";
|
3
|
+
import { buildCommon } from "./build.js";
|
4
|
+
import { CWD } from "../common/constant.js";
|
5
|
+
import { replace } from "../plugins/replace.js";
|
6
|
+
import { genComponentStyle } from "../plugins/gen-component-style.js";
|
7
|
+
export async function buildComponents(options) {
|
8
|
+
const components = readdirSync("./components").filter((name) => {
|
9
|
+
const componentDir = resolve(CWD, `./components`, name);
|
10
|
+
const isDir = lstatSync(componentDir).isDirectory();
|
11
|
+
return isDir && readdirSync(componentDir).includes("index.ts");
|
12
|
+
});
|
13
|
+
components.forEach(async (component) => {
|
14
|
+
const entry = resolve(CWD, `./components/${component}/index.ts`);
|
15
|
+
const outDir = resolve(CWD, `./package/${component}`);
|
16
|
+
const config = {
|
17
|
+
publicDir: false,
|
18
|
+
build: {
|
19
|
+
lib: {
|
20
|
+
entry
|
21
|
+
},
|
22
|
+
outDir
|
23
|
+
},
|
24
|
+
plugins: [genComponentStyle(), replace((format, args) => `..${args[1]}/index.${format}.js`)]
|
25
|
+
};
|
26
|
+
console.log(`build ${component} begin`);
|
27
|
+
await buildCommon({ ...options, config, type: 'lib' });
|
28
|
+
console.log(`build ${component} success`);
|
29
|
+
// const cssEntry = `./components/${component}/src/${component}.scss`;
|
30
|
+
// if(!existsSync(cssEntry)) {
|
31
|
+
// return;
|
32
|
+
// }
|
33
|
+
// await buildCss({...options,entry: cssEntry, outfile: `./package/${component}/index.css` });
|
34
|
+
});
|
35
|
+
}
|
36
|
+
;
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { build } from "esbuild";
|
2
|
+
import { sassPlugin } from 'esbuild-sass-plugin';
|
3
|
+
export async function buildCss(options) {
|
4
|
+
const { entry, outfile } = options;
|
5
|
+
await build({
|
6
|
+
entryPoints: [entry],
|
7
|
+
outfile,
|
8
|
+
bundle: true,
|
9
|
+
plugins: [sassPlugin()],
|
10
|
+
});
|
11
|
+
}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
import { buildCommon } from "./build.js";
|
2
|
+
import { generateTypes } from "../plugins/dts.js";
|
3
|
+
export async function buildLib(options) {
|
4
|
+
const { dts = false } = options;
|
5
|
+
const config = {
|
6
|
+
publicDir: false,
|
7
|
+
plugins: [
|
8
|
+
dts && generateTypes("./components", "./package/types")
|
9
|
+
]
|
10
|
+
};
|
11
|
+
console.log(`build lib begin`);
|
12
|
+
await buildCommon({ ...options, config, type: 'lib' });
|
13
|
+
console.log(`build lib success`);
|
14
|
+
// await buildCss({...options, entry: "./components/index.scss", outfile: "./package/index.css"});
|
15
|
+
}
|
16
|
+
;
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { build, mergeConfig, loadConfigFromFile } from 'vite';
|
2
|
+
import { getViteConfig } from '../common/get-vite-config.js';
|
3
|
+
export async function buildCommon(options) {
|
4
|
+
const { configFile, config, type } = options;
|
5
|
+
const viteConfig = await loadConfigFromFile({ command: 'build', mode: 'production' }, configFile);
|
6
|
+
const defaultConfig = await getViteConfig(type);
|
7
|
+
const libConfig = mergeConfig(mergeConfig(defaultConfig, viteConfig ? viteConfig.config : {}), config);
|
8
|
+
await build(libConfig);
|
9
|
+
}
|
10
|
+
;
|
@@ -0,0 +1,54 @@
|
|
1
|
+
import { generateApp } from "../common/generate-app.js";
|
2
|
+
import inquirer from "inquirer";
|
3
|
+
const prompt = inquirer.createPromptModule();
|
4
|
+
const questions = [
|
5
|
+
{
|
6
|
+
type: "input",
|
7
|
+
name: "name",
|
8
|
+
message: "What is your project name?",
|
9
|
+
default: "my-project",
|
10
|
+
},
|
11
|
+
{
|
12
|
+
type: "list",
|
13
|
+
name: "type",
|
14
|
+
message: "What type of project is this?",
|
15
|
+
choices: ["app", "lib"],
|
16
|
+
},
|
17
|
+
{
|
18
|
+
type: "list",
|
19
|
+
name: "platform",
|
20
|
+
message: "What platform of project is this?",
|
21
|
+
choices: ["pc", "mobile"],
|
22
|
+
when: (response) => {
|
23
|
+
const { type } = response;
|
24
|
+
return type === 'app';
|
25
|
+
}
|
26
|
+
},
|
27
|
+
{
|
28
|
+
type: "checkbox",
|
29
|
+
name: "formats",
|
30
|
+
message: "What output format of project is this?",
|
31
|
+
choices: ["es", "umd", "systemjs"],
|
32
|
+
default: ["es", "umd"],
|
33
|
+
when: (response) => {
|
34
|
+
const { type } = response;
|
35
|
+
return type === 'lib';
|
36
|
+
}
|
37
|
+
},
|
38
|
+
{
|
39
|
+
type: "list",
|
40
|
+
name: "format",
|
41
|
+
message: "What output format of project is this?",
|
42
|
+
choices: ["es", "umd", "systemjs"],
|
43
|
+
default: ["es"],
|
44
|
+
when: (response) => {
|
45
|
+
const { type } = response;
|
46
|
+
return type === 'app';
|
47
|
+
}
|
48
|
+
}
|
49
|
+
];
|
50
|
+
export async function createApp() {
|
51
|
+
const response = await prompt(questions);
|
52
|
+
generateApp(response);
|
53
|
+
}
|
54
|
+
;
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import { createServer, mergeConfig } from 'vite';
|
2
|
+
import { getViteConfig } from '../common/get-vite-config.js';
|
3
|
+
export const devServe = async (options) => {
|
4
|
+
const { port = 1337, host = true } = options;
|
5
|
+
const config = await getViteConfig();
|
6
|
+
const devConfig = mergeConfig({
|
7
|
+
configFile: false,
|
8
|
+
mode: 'dev',
|
9
|
+
define: {
|
10
|
+
__VUE_OPTIONS_API__: 'true',
|
11
|
+
__VUE_PROD_DEVTOOLS__: 'true',
|
12
|
+
__VUE_PROD_HYDRATION_MISMATCH_DETAILS__: 'true'
|
13
|
+
},
|
14
|
+
server: {
|
15
|
+
port,
|
16
|
+
host,
|
17
|
+
hmr: true
|
18
|
+
}
|
19
|
+
}, config);
|
20
|
+
const server = await createServer(devConfig);
|
21
|
+
await server.listen();
|
22
|
+
server.printUrls();
|
23
|
+
};
|
@@ -0,0 +1,16 @@
|
|
1
|
+
import { preview, mergeConfig } from 'vite';
|
2
|
+
import { getViteConfig } from '../common/get-vite-config.js';
|
3
|
+
export const previewServe = async (options) => {
|
4
|
+
const { port = 4137, host = true } = options;
|
5
|
+
const config = await getViteConfig();
|
6
|
+
const previewConfig = mergeConfig({
|
7
|
+
configFile: false,
|
8
|
+
preview: {
|
9
|
+
port,
|
10
|
+
host,
|
11
|
+
open: true
|
12
|
+
}
|
13
|
+
}, config);
|
14
|
+
const server = await preview(previewConfig);
|
15
|
+
server.printUrls();
|
16
|
+
};
|
@@ -0,0 +1,18 @@
|
|
1
|
+
import { existsSync } from 'node:fs';
|
2
|
+
import { fileURLToPath } from 'node:url';
|
3
|
+
import { join, dirname } from 'node:path';
|
4
|
+
function findRootDir(dir) {
|
5
|
+
if (existsSync(join(dir, 'farris.config.js'))) {
|
6
|
+
return dir;
|
7
|
+
}
|
8
|
+
const parentDir = dirname(dir);
|
9
|
+
if (dir === parentDir) {
|
10
|
+
return dir;
|
11
|
+
}
|
12
|
+
return findRootDir(parentDir);
|
13
|
+
}
|
14
|
+
export const getDirname = (url) => fileURLToPath(new URL('.', url));
|
15
|
+
// Root paths
|
16
|
+
export const CWD = process.cwd();
|
17
|
+
export const ROOT = findRootDir(CWD);
|
18
|
+
export const FAARIS_CONFIG_FILE = join(CWD, 'farris.config.mjs');
|
@@ -0,0 +1,44 @@
|
|
1
|
+
import { resolve } from 'path';
|
2
|
+
import { createRequire } from "node:module";
|
3
|
+
import { CWD, getDirname } from './constant.js';
|
4
|
+
import { getVersion } from "./get-version.js";
|
5
|
+
const require = createRequire(import.meta.url);
|
6
|
+
const { copySync, readFileSync, writeFileSync } = require("fs-extra");
|
7
|
+
const Array2String = (arr) => {
|
8
|
+
return `[${arr.reduce((acc, cur, index) => {
|
9
|
+
acc = index === 1 ? "'" + acc + "'" : acc;
|
10
|
+
acc += `,'${cur}'`;
|
11
|
+
return acc;
|
12
|
+
})}]`;
|
13
|
+
};
|
14
|
+
const copyTemplate = (template, target) => {
|
15
|
+
const templatePath = resolve(getDirname(import.meta.url), '../../templates', template);
|
16
|
+
const targetPath = resolve(CWD, target);
|
17
|
+
console.log(templatePath, targetPath);
|
18
|
+
copySync(templatePath, targetPath);
|
19
|
+
};
|
20
|
+
const replaceContent = (path, args) => {
|
21
|
+
let content = readFileSync(path, 'utf-8');
|
22
|
+
Object.keys(args).forEach((key) => {
|
23
|
+
const regexp = new RegExp(`<%= ${key} %>`, 'g');
|
24
|
+
const value = Array.isArray(args[key]) ? Array2String(args[key]) : args[key];
|
25
|
+
content = content.replace(regexp, value);
|
26
|
+
});
|
27
|
+
writeFileSync(path, content);
|
28
|
+
};
|
29
|
+
export const generateApp = (options) => {
|
30
|
+
const { name, type, formats, format, platform } = options;
|
31
|
+
const template = type === 'lib' ? 'lib' : platform;
|
32
|
+
copyTemplate(template, name);
|
33
|
+
const replaceFiles = [
|
34
|
+
'package.json',
|
35
|
+
'farris.config.mjs',
|
36
|
+
'index.html'
|
37
|
+
];
|
38
|
+
const cliVersion = getVersion();
|
39
|
+
replaceFiles.forEach(replaceFile => {
|
40
|
+
replaceContent(resolve(CWD, name, replaceFile), { name, formats, format, platform, cliVersion });
|
41
|
+
});
|
42
|
+
console.log(`cd ${name}`);
|
43
|
+
console.log(`npm install or yarn`);
|
44
|
+
};
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import { readFileSync } from "node:fs";
|
2
|
+
import { resolve } from 'node:path';
|
3
|
+
import { CWD } from "../common/constant.js";
|
4
|
+
export const getDependencies = () => {
|
5
|
+
const pkg = readFileSync(resolve(CWD, 'package.json'), 'utf-8');
|
6
|
+
const packageJson = JSON.parse(pkg);
|
7
|
+
const { dependencies, peerDependencies } = packageJson;
|
8
|
+
return [...Object.keys(dependencies || {}), ...Object.keys(peerDependencies || {})];
|
9
|
+
};
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { pathToFileURL } from 'node:url';
|
2
|
+
import { FAARIS_CONFIG_FILE } from './constant.js';
|
3
|
+
async function getFarrisConfigAsync() {
|
4
|
+
try {
|
5
|
+
return (await import(pathToFileURL(FAARIS_CONFIG_FILE).href)).default;
|
6
|
+
}
|
7
|
+
catch (err) {
|
8
|
+
return {};
|
9
|
+
}
|
10
|
+
}
|
11
|
+
export { getFarrisConfigAsync };
|
@@ -0,0 +1,38 @@
|
|
1
|
+
import { mergeConfig } from 'vite';
|
2
|
+
import { getFarrisConfigAsync } from './get-farris-config.js';
|
3
|
+
import { getDependencies } from '../common/get-dependencies.js';
|
4
|
+
const formatFarrisConfig = (farrisConfig, type) => {
|
5
|
+
const { lib, format, minify = true, externals = { include: [], exclude: [] }, externalDependencies, plugins, alias } = farrisConfig;
|
6
|
+
const dependencies = externalDependencies ? getDependencies() : [];
|
7
|
+
let external = externals.include ? [...externals.include, ...dependencies] : dependencies;
|
8
|
+
external = external.filter(item => !externals.exclude?.includes(item));
|
9
|
+
format && (process.env.FARRIS_FORMAT = format);
|
10
|
+
const viteConfig = {
|
11
|
+
build: {
|
12
|
+
minify,
|
13
|
+
lib: type === 'lib' ? lib : undefined,
|
14
|
+
rollupOptions: {
|
15
|
+
output: {
|
16
|
+
format
|
17
|
+
},
|
18
|
+
external
|
19
|
+
}
|
20
|
+
},
|
21
|
+
plugins,
|
22
|
+
resolve: {
|
23
|
+
alias
|
24
|
+
}
|
25
|
+
};
|
26
|
+
return viteConfig;
|
27
|
+
};
|
28
|
+
const formatViteConfig = async (type) => {
|
29
|
+
const { viteConfig = {}, ...farrisConfig } = await getFarrisConfigAsync();
|
30
|
+
const customViteConfig = formatFarrisConfig(farrisConfig, type);
|
31
|
+
return mergeConfig(customViteConfig, viteConfig);
|
32
|
+
};
|
33
|
+
const getViteConfig = async (type = 'app') => {
|
34
|
+
const viteConfig = await formatViteConfig(type);
|
35
|
+
const { default: defaultViteConfig } = await import(`../config/vite-${type}.js`);
|
36
|
+
return mergeConfig(defaultViteConfig, viteConfig);
|
37
|
+
};
|
38
|
+
export { getViteConfig };
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import vue from '@vitejs/plugin-vue';
|
2
|
+
import vueJsx from '@vitejs/plugin-vue-jsx';
|
3
|
+
import { CWD } from '../common/constant.js';
|
4
|
+
import { htmlSystemPlugin } from '../plugins/html-system.js';
|
5
|
+
export default {
|
6
|
+
root: CWD,
|
7
|
+
base: './',
|
8
|
+
// logLevel: 'silent',
|
9
|
+
plugins: [
|
10
|
+
vue(),
|
11
|
+
vueJsx(),
|
12
|
+
process.env.FARRIS_FORMAT === 'systemjs' && htmlSystemPlugin()
|
13
|
+
]
|
14
|
+
};
|
@@ -0,0 +1,35 @@
|
|
1
|
+
import vue from '@vitejs/plugin-vue';
|
2
|
+
import vueJsx from '@vitejs/plugin-vue-jsx';
|
3
|
+
import { CWD } from '../common/constant.js';
|
4
|
+
import { resolve } from "node:path";
|
5
|
+
export default {
|
6
|
+
root: CWD,
|
7
|
+
base: './',
|
8
|
+
logLevel: 'silent',
|
9
|
+
plugins: [vue(), vueJsx()],
|
10
|
+
build: {
|
11
|
+
lib: {
|
12
|
+
entry: resolve(CWD, `./src/main.ts`),
|
13
|
+
fileName: "index",
|
14
|
+
formats: ["es", "systemjs"],
|
15
|
+
},
|
16
|
+
outDir: resolve(CWD, `./lib`),
|
17
|
+
rollupOptions: {
|
18
|
+
external: [],
|
19
|
+
output: {
|
20
|
+
exports: "named",
|
21
|
+
globals: (id) => {
|
22
|
+
if (id.includes('@components')) {
|
23
|
+
const name = id.split('/').pop() || '';
|
24
|
+
return name.slice(0, 1).toUpperCase() + name.slice(1);
|
25
|
+
}
|
26
|
+
const map = {
|
27
|
+
vue: "Vue",
|
28
|
+
'@farris/mobile-ui-vue': 'FarrisVue'
|
29
|
+
};
|
30
|
+
return map[id];
|
31
|
+
}
|
32
|
+
}
|
33
|
+
},
|
34
|
+
}
|
35
|
+
};
|
package/lib/index.js
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
#!/usr/bin/env node
|
2
|
+
import { Command } from 'commander';
|
3
|
+
import { getVersion } from "./common/get-version.js";
|
4
|
+
const program = new Command();
|
5
|
+
program.version(`@farris/cli ${getVersion()}`);
|
6
|
+
program
|
7
|
+
.command('build')
|
8
|
+
.description('构建')
|
9
|
+
.option('-c --configFile [configFile]', 'config file path')
|
10
|
+
.action(async (options) => {
|
11
|
+
const { buildCommon } = await import('./commands/build.js');
|
12
|
+
return buildCommon(options);
|
13
|
+
});
|
14
|
+
program
|
15
|
+
.command('build-lib')
|
16
|
+
.description('构建')
|
17
|
+
.option('-c --configFile [configFile]', 'config file path')
|
18
|
+
.option('-d --dts', 'dts')
|
19
|
+
.action(async (options) => {
|
20
|
+
const { buildLib } = await import('./commands/build-lib.js');
|
21
|
+
return buildLib(options);
|
22
|
+
});
|
23
|
+
program
|
24
|
+
.command('build-components')
|
25
|
+
.description('构建')
|
26
|
+
.option('-c --configFile [configFile]', 'config file path')
|
27
|
+
.action(async (options) => {
|
28
|
+
const { buildComponents } = await import('./commands/build-components.js');
|
29
|
+
return buildComponents(options);
|
30
|
+
});
|
31
|
+
program
|
32
|
+
.command('create-app')
|
33
|
+
.description('新建 App 模板')
|
34
|
+
.action(async () => {
|
35
|
+
const { createApp } = await import('./commands/create-app.js');
|
36
|
+
return createApp();
|
37
|
+
});
|
38
|
+
program
|
39
|
+
.command('dev')
|
40
|
+
.description('创建 Dev Server')
|
41
|
+
.option('-p --port [port]', 'Server Port')
|
42
|
+
.action(async (options) => {
|
43
|
+
const { devServe } = await import('./commands/dev-serve.js');
|
44
|
+
return devServe(options);
|
45
|
+
});
|
46
|
+
program
|
47
|
+
.command('preview')
|
48
|
+
.description('创建 Preview Server')
|
49
|
+
.option('-p --port [port]', 'Server Port')
|
50
|
+
.action(async (options) => {
|
51
|
+
const { previewServe } = await import('./commands/preview-serve.js');
|
52
|
+
return previewServe(options);
|
53
|
+
});
|
54
|
+
program.parse();
|
@@ -0,0 +1,43 @@
|
|
1
|
+
const NotStyleComponents = ['designer-canvas', 'dynamic-view', 'dynamic-resolver', 'common'];
|
2
|
+
const getComponentStyle = (imports) => {
|
3
|
+
const components = imports
|
4
|
+
.filter(path => {
|
5
|
+
return path.startsWith('@components/') && !NotStyleComponents.find(notStylecomponent => path.includes(notStylecomponent));
|
6
|
+
})
|
7
|
+
.filter((item, index, array) => {
|
8
|
+
return array.indexOf(item) === index;
|
9
|
+
})
|
10
|
+
.map(name => {
|
11
|
+
const paths = name.split('/');
|
12
|
+
return {
|
13
|
+
name: paths[1],
|
14
|
+
path: `../${paths[1]}/index.css`
|
15
|
+
};
|
16
|
+
});
|
17
|
+
components.push({
|
18
|
+
name: 'components',
|
19
|
+
path: `./index.css`
|
20
|
+
});
|
21
|
+
const template = `${components.map(component => {
|
22
|
+
const { path } = component;
|
23
|
+
return `import '${path}';`;
|
24
|
+
}).join('\n')}
|
25
|
+
`;
|
26
|
+
return template;
|
27
|
+
};
|
28
|
+
export function genComponentStyle() {
|
29
|
+
return {
|
30
|
+
name: 'farris-gen-component-style',
|
31
|
+
renderChunk(code, chunk) {
|
32
|
+
const { imports } = chunk;
|
33
|
+
const template = getComponentStyle(imports);
|
34
|
+
this.emitFile({
|
35
|
+
type: 'asset',
|
36
|
+
fileName: 'style.js',
|
37
|
+
source: template
|
38
|
+
});
|
39
|
+
return code;
|
40
|
+
}
|
41
|
+
};
|
42
|
+
}
|
43
|
+
;
|
@@ -0,0 +1,11 @@
|
|
1
|
+
export const htmlSystemPlugin = () => {
|
2
|
+
return {
|
3
|
+
name: 'html-transform-system',
|
4
|
+
transformIndexHtml(html) {
|
5
|
+
const regexp = /<script.*type="module".*src="(.*?)"><\/script>/;
|
6
|
+
return html.replace(regexp, (str, p1) => `
|
7
|
+
<script src="https://cdn.bootcdn.net/ajax/libs/systemjs/6.15.1/system.js"></script>
|
8
|
+
<script >System.import("${p1}");</script>`);
|
9
|
+
}
|
10
|
+
};
|
11
|
+
};
|
@@ -0,0 +1,13 @@
|
|
1
|
+
export function replace(path) {
|
2
|
+
return {
|
3
|
+
name: 'farris-replace',
|
4
|
+
renderChunk(code, chunk) {
|
5
|
+
const fileNames = chunk.fileName.split('.');
|
6
|
+
const format = fileNames[fileNames.length - 2];
|
7
|
+
return code.replace(/@components(\/\w+)/g, (...args) => {
|
8
|
+
return path(format, args);
|
9
|
+
});
|
10
|
+
}
|
11
|
+
};
|
12
|
+
}
|
13
|
+
;
|
package/package.json
CHANGED
@@ -1,26 +1,38 @@
|
|
1
1
|
{
|
2
2
|
"name": "@farris/cli",
|
3
|
-
"
|
4
|
-
"
|
5
|
-
"
|
6
|
-
"
|
7
|
-
|
3
|
+
"private": false,
|
4
|
+
"version": "2.0.0-beta.7",
|
5
|
+
"type": "module",
|
6
|
+
"typings": "lib/index.d.ts",
|
7
|
+
"bin": {
|
8
|
+
"farris-cli": "./bin/index.js"
|
8
9
|
},
|
9
|
-
"
|
10
|
-
"
|
11
|
-
"url": "https://git.iec.io/webadp/farris-cli.git"
|
10
|
+
"engines": {
|
11
|
+
"node": ">=16.0.0"
|
12
12
|
},
|
13
|
-
"
|
14
|
-
"
|
15
|
-
"CLI"
|
16
|
-
],
|
17
|
-
"bin": {
|
18
|
-
"farris": "ci/cli.js"
|
13
|
+
"scripts": {
|
14
|
+
"build": "rimraf ./lib && tsc"
|
19
15
|
},
|
20
|
-
"
|
21
|
-
|
16
|
+
"files": [
|
17
|
+
"lib",
|
18
|
+
"templates",
|
19
|
+
"bin.js"
|
20
|
+
],
|
22
21
|
"dependencies": {
|
23
|
-
"
|
24
|
-
"
|
22
|
+
"@types/inquirer": "^9.0.7",
|
23
|
+
"@vitejs/plugin-vue": "^4.0.0",
|
24
|
+
"@vitejs/plugin-vue-jsx": "^3.0.0",
|
25
|
+
"commander": "^9.4.0",
|
26
|
+
"esbuild-sass-plugin": "^3.3.1",
|
27
|
+
"inquirer": "^9.3.0",
|
28
|
+
"typescript": "^4.6.4",
|
29
|
+
"vite": "^4.4.1",
|
30
|
+
"vite-plugin-dts": "^3.9.1",
|
31
|
+
"vite-plugin-html": "^3.2.2"
|
32
|
+
},
|
33
|
+
"devDependencies": {
|
34
|
+
"@types/inquirer": "^9.0.7",
|
35
|
+
"rimraf": "^5.0.7",
|
36
|
+
"vue": "^3.2.37"
|
25
37
|
}
|
26
38
|
}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
/* eslint-env node */
|
2
|
+
require('@rushstack/eslint-patch/modern-module-resolution')
|
3
|
+
|
4
|
+
module.exports = {
|
5
|
+
root: true,
|
6
|
+
'extends': [
|
7
|
+
'plugin:vue/vue3-essential',
|
8
|
+
'eslint:recommended',
|
9
|
+
'@vue/eslint-config-typescript',
|
10
|
+
'@vue/eslint-config-prettier/skip-formatting'
|
11
|
+
],
|
12
|
+
parserOptions: {
|
13
|
+
ecmaVersion: 'latest'
|
14
|
+
}
|
15
|
+
}
|
@@ -0,0 +1,35 @@
|
|
1
|
+
import { fileURLToPath, URL } from 'node:url';
|
2
|
+
|
3
|
+
export default {
|
4
|
+
// 库模式配置
|
5
|
+
lib: {
|
6
|
+
// 入口 默认值 './src/main.ts'
|
7
|
+
entry: './packages/index.ts',
|
8
|
+
// 库名称
|
9
|
+
name: "<%= name %>",
|
10
|
+
// 输出文件名
|
11
|
+
fileName: "index",
|
12
|
+
// 输出文件格式 默认值 ["es", 'systemjs']
|
13
|
+
formats: <%= formats %>,
|
14
|
+
},
|
15
|
+
// 输出目录 App模式默认值 './dist' Lib模式 './lib'
|
16
|
+
// outDir: fileURLToPath(new URL('./dist', import.meta.url)),
|
17
|
+
// 最小化 默认值 true
|
18
|
+
minify: true,
|
19
|
+
// 外部依赖排除项 默认值 { include: [], exclude: [] }
|
20
|
+
// externals: {
|
21
|
+
// include: [],
|
22
|
+
// exclude: []
|
23
|
+
// },
|
24
|
+
// 是否排除 package.json 中 dependencies和 peerDependencies 依赖的包; App模式默认值 false Lib模式默认值 true
|
25
|
+
externalDependencies: true,
|
26
|
+
// 路径别名 默认值 null
|
27
|
+
alias: [
|
28
|
+
{ find: '@', replacement: fileURLToPath(new URL('./src', import.meta.url)) },
|
29
|
+
{ find: '@packages', replacement: fileURLToPath(new URL('./packages', import.meta.url)) },
|
30
|
+
],
|
31
|
+
// 插件 默认值 [vue(), vueJsx()] 不要重复添加
|
32
|
+
// plugins: [],
|
33
|
+
// viteConfig 配置项
|
34
|
+
viteConfig: {}
|
35
|
+
}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<meta charset="UTF-8">
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6
|
+
<title>Vite App</title>
|
7
|
+
</head>
|
8
|
+
<body>
|
9
|
+
<div id="app"></div>
|
10
|
+
<script type="module" src="/src/main.ts"></script>
|
11
|
+
</body>
|
12
|
+
</html>
|
@@ -0,0 +1,29 @@
|
|
1
|
+
{
|
2
|
+
"name": "<%= name %>",
|
3
|
+
"version": "0.0.0",
|
4
|
+
"private": true,
|
5
|
+
"type": "module",
|
6
|
+
"main": "./dist/index.umd.js",
|
7
|
+
"module": "./dist/index.js",
|
8
|
+
"scripts": {
|
9
|
+
"dev": "farris-cli dev",
|
10
|
+
"build": "farris-cli build-lib",
|
11
|
+
"preview": "farris-cli preview",
|
12
|
+
"lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore",
|
13
|
+
"format": "prettier --write src/"
|
14
|
+
},
|
15
|
+
"dependencies": {
|
16
|
+
"vue": "^3.4.29"
|
17
|
+
},
|
18
|
+
"devDependencies": {
|
19
|
+
"@farris/cli": "<%= cliVersion %>",
|
20
|
+
"@rushstack/eslint-patch": "^1.8.0",
|
21
|
+
"@vue/eslint-config-prettier": "^9.0.0",
|
22
|
+
"@vue/eslint-config-typescript": "^13.0.0",
|
23
|
+
"@vue/tsconfig": "^0.5.1",
|
24
|
+
"eslint": "^8.57.0",
|
25
|
+
"eslint-plugin-vue": "^9.23.0",
|
26
|
+
"prettier": "^3.2.5",
|
27
|
+
"typescript": "~5.4.0"
|
28
|
+
}
|
29
|
+
}
|