@farris/cli 2.2.0-beta.1 → 2.2.0

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.
Files changed (112) hide show
  1. package/bin/index.js +1 -1
  2. package/lib/commands/build-components.js +48 -48
  3. package/lib/commands/build-components.js.map +1 -1
  4. package/lib/commands/build-css.js +38 -38
  5. package/lib/commands/build-css.js.map +1 -1
  6. package/lib/commands/build-lib.js +25 -25
  7. package/lib/commands/build.js +14 -15
  8. package/lib/commands/build.js.map +1 -1
  9. package/lib/commands/create-app-options.js +75 -0
  10. package/lib/commands/create-app-options.js.map +1 -0
  11. package/lib/commands/create-app.js +123 -54
  12. package/lib/commands/create-app.js.map +1 -1
  13. package/lib/commands/dev-serve.js +18 -18
  14. package/lib/commands/extract-i18n.js +74 -74
  15. package/lib/commands/extract-i18n.js.map +1 -1
  16. package/lib/commands/generate/api.js +188 -0
  17. package/lib/commands/generate/api.js.map +1 -0
  18. package/lib/commands/generate/common.js +101 -0
  19. package/lib/commands/generate/common.js.map +1 -0
  20. package/lib/commands/generate/component.js +164 -0
  21. package/lib/commands/generate/component.js.map +1 -0
  22. package/lib/commands/generate/view.js +198 -0
  23. package/lib/commands/generate/view.js.map +1 -0
  24. package/lib/commands/preview-serve.js +16 -16
  25. package/lib/commands/workspace/add-app.js +181 -0
  26. package/lib/commands/workspace/add-app.js.map +1 -0
  27. package/lib/commands/workspace/create.js +380 -0
  28. package/lib/commands/workspace/create.js.map +1 -0
  29. package/lib/commands/workspace/inspect.js +31 -0
  30. package/lib/commands/workspace/inspect.js.map +1 -0
  31. package/lib/commands/workspace/verify.js +39 -0
  32. package/lib/commands/workspace/verify.js.map +1 -0
  33. package/lib/common/component-file-name.js +3 -3
  34. package/lib/common/constant.js +64 -22
  35. package/lib/common/constant.js.map +1 -1
  36. package/lib/common/generate-app.js +54 -51
  37. package/lib/common/generate-app.js.map +1 -1
  38. package/lib/common/get-dependencies.js +9 -9
  39. package/lib/common/get-farris-config.js +25 -25
  40. package/lib/common/get-farris-config.js.map +1 -1
  41. package/lib/common/get-version.js +6 -6
  42. package/lib/common/get-vite-config.js +106 -49
  43. package/lib/common/get-vite-config.js.map +1 -1
  44. package/lib/common/lib-package-exports.js +20 -20
  45. package/lib/common/list-lib-components.js +23 -23
  46. package/lib/common/list-lib-components.js.map +1 -1
  47. package/lib/common/output.js +95 -0
  48. package/lib/common/output.js.map +1 -0
  49. package/lib/common/project-package-name.js +5 -0
  50. package/lib/common/project-package-name.js.map +1 -0
  51. package/lib/common/safety.js +172 -0
  52. package/lib/common/safety.js.map +1 -0
  53. package/lib/common/template-manifest.js +16 -16
  54. package/lib/common/template-manifest.js.map +1 -1
  55. package/lib/common/template-renderer.js +115 -0
  56. package/lib/common/template-renderer.js.map +1 -0
  57. package/lib/common/transaction.js +84 -0
  58. package/lib/common/transaction.js.map +1 -0
  59. package/lib/common/verifier.js +151 -0
  60. package/lib/common/verifier.js.map +1 -0
  61. package/lib/config/vite-app.js +13 -13
  62. package/lib/config/vite-common.js +20 -20
  63. package/lib/config/vite-common.js.map +1 -1
  64. package/lib/config/vite-component.js +32 -32
  65. package/lib/config/vite-component.js.map +1 -1
  66. package/lib/config/vite-lib.js +26 -26
  67. package/lib/index.js +185 -87
  68. package/lib/index.js.map +1 -1
  69. package/lib/plugins/create-component-style.js +44 -44
  70. package/lib/plugins/create-package-json.js +48 -48
  71. package/lib/plugins/create-package-json.js.map +1 -1
  72. package/lib/plugins/dts.js +8 -8
  73. package/lib/plugins/html-system.js +9 -9
  74. package/lib/plugins/replace.js +17 -17
  75. package/lib/plugins/systemjs-bundle.js +15 -15
  76. package/lib/plugins/systemjs-bundle.js.map +1 -1
  77. package/package.json +12 -9
  78. package/templates/lib/.gitlab-ci.yml +85 -0
  79. package/templates/lib/README.md +1 -15
  80. package/templates/lib/components/button/button.spec.ts +8 -0
  81. package/templates/lib/index.html +12 -0
  82. package/templates/lib/package.json +6 -1
  83. package/templates/lib/src/App.vue +7 -0
  84. package/templates/lib/src/main.ts +4 -0
  85. package/templates/lib/vitest.config.ts +9 -0
  86. package/templates/mobile/.gitlab-ci.yml +88 -0
  87. package/templates/mobile/package.json +5 -1
  88. package/templates/mobile/project.json +4 -0
  89. package/templates/mobile/src/components/TheButton.spec.ts +8 -0
  90. package/templates/mobile/vitest.config.ts +9 -0
  91. package/templates/web/.gitlab-ci.yml +88 -0
  92. package/templates/web/package.json +5 -1
  93. package/templates/web/project.json +4 -0
  94. package/templates/web/src/components/TheButton.spec.ts +8 -0
  95. package/templates/web/vitest.config.ts +9 -0
  96. package/templates/workspace/app/farris.config.mjs +13 -0
  97. package/templates/workspace/app/index.html +12 -0
  98. package/templates/workspace/app/package.json +22 -0
  99. package/templates/workspace/app/src/App.tsx +11 -0
  100. package/templates/workspace/app/src/locales/index.ts +5 -0
  101. package/templates/workspace/app/src/locales/zh-CN.json +1 -0
  102. package/templates/workspace/app/src/main.ts +12 -0
  103. package/templates/workspace/app/src/router/index.ts +16 -0
  104. package/templates/workspace/app/src/styles/index.css +0 -0
  105. package/templates/workspace/app/src/styles/index.scss +0 -0
  106. package/templates/workspace/app/src/views/home/composables/use-home.ts +7 -0
  107. package/templates/workspace/app/src/views/home/home.component.tsx +15 -0
  108. package/templates/workspace/app/src/views/home/index.ts +4 -0
  109. package/templates/workspace/app/tsconfig.json +21 -0
  110. package/templates/workspace/root/README.md +28 -0
  111. package/templates/workspace/root/package.json +13 -0
  112. package/templates/workspace/root/pnpm-workspace.yaml +12 -0
@@ -1,49 +1,49 @@
1
- import { readFileSync } from 'node:fs';
2
- import { resolve } from 'node:path';
3
- import { CWD } from '../common/constant.js';
4
- import { listLibComponents } from '../common/list-lib-components.js';
5
- import { buildLibPackageExports } from '../common/lib-package-exports.js';
6
- export const createPackageJson = () => {
7
- const seen = new Set();
8
- return {
9
- name: 'create-package-json',
10
- generateBundle(outputOptions) {
11
- if (outputOptions.format) {
12
- seen.add(outputOptions.format === 'es' ? 'es' : outputOptions.format);
13
- }
14
- const pkg = JSON.parse(readFileSync(resolve(CWD, 'package.json'), 'utf-8'));
15
- const result = {
16
- name: '',
17
- version: '',
18
- private: false,
19
- types: './types/index.d.ts',
20
- style: './index.css'
21
- };
22
- if (seen.has('es')) {
23
- result.module = './index.esm.js';
24
- if (!seen.has('umd')) {
25
- result.main = './index.esm.js';
26
- }
27
- }
28
- if (seen.has('umd')) {
29
- result.main = './index.umd.js';
30
- }
31
- const exclude = ['scripts', 'devDependencies', 'private'];
32
- Object.keys(pkg).forEach((key) => {
33
- if (exclude.includes(key)) {
34
- return;
35
- }
36
- result[key] = pkg[key];
37
- });
38
- const extra = buildLibPackageExports(listLibComponents(process.cwd()), seen);
39
- result.sideEffects = extra.sideEffects;
40
- result.exports = extra.exports;
41
- this.emitFile({
42
- type: 'asset',
43
- fileName: 'package.json',
44
- source: JSON.stringify(result, null, 2)
45
- });
46
- }
47
- };
48
- };
1
+ import { readFileSync } from 'node:fs';
2
+ import { resolve } from 'node:path';
3
+ import { CWD } from '../common/constant.js';
4
+ import { listLibComponents } from '../common/list-lib-components.js';
5
+ import { buildLibPackageExports } from '../common/lib-package-exports.js';
6
+ export const createPackageJson = () => {
7
+ const seen = new Set();
8
+ return {
9
+ name: 'create-package-json',
10
+ generateBundle(outputOptions) {
11
+ if (outputOptions.format) {
12
+ seen.add(outputOptions.format === 'es' ? 'es' : outputOptions.format);
13
+ }
14
+ const pkg = JSON.parse(readFileSync(resolve(CWD, 'package.json'), 'utf-8'));
15
+ const result = {
16
+ name: '',
17
+ version: '',
18
+ private: false,
19
+ types: './types/index.d.ts',
20
+ style: './index.css'
21
+ };
22
+ if (seen.has('es')) {
23
+ result.module = './index.esm.js';
24
+ if (!seen.has('umd')) {
25
+ result.main = './index.esm.js';
26
+ }
27
+ }
28
+ if (seen.has('umd')) {
29
+ result.main = './index.umd.js';
30
+ }
31
+ const exclude = ['scripts', 'devDependencies', 'private'];
32
+ Object.keys(pkg).forEach((key) => {
33
+ if (exclude.includes(key)) {
34
+ return;
35
+ }
36
+ result[key] = pkg[key];
37
+ });
38
+ const extra = buildLibPackageExports(listLibComponents(process.cwd()), seen);
39
+ result.sideEffects = extra.sideEffects;
40
+ result.exports = extra.exports;
41
+ this.emitFile({
42
+ type: 'asset',
43
+ fileName: 'package.json',
44
+ source: JSON.stringify(result, null, 2)
45
+ });
46
+ }
47
+ };
48
+ };
49
49
  //# sourceMappingURL=create-package-json.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-package-json.js","sourceRoot":"","sources":["../../src/plugins/create-package-json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAE1E,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAQ,EAAE;IACzC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,OAAO;QACL,IAAI,EAAE,qBAAqB;QAC3B,cAAc,CAAC,aAAkC;YAC/C,IAAI,aAAa,CAAC,MAAM,EAAE;gBACxB,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;aACvE;YACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YAC5E,MAAM,MAAM,GAAwB;gBAClC,IAAI,EAAE,EAAE;gBACR,OAAO,EAAE,EAAE;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,oBAAoB;gBAC3B,KAAK,EAAE,aAAa;aACrB,CAAC;YACF,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBAClB,MAAM,CAAC,MAAM,GAAG,gBAAgB,CAAC;gBACjC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;oBACpB,MAAM,CAAC,IAAI,GAAG,gBAAgB,CAAC;iBAChC;aACF;YACD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;gBACnB,MAAM,CAAC,IAAI,GAAG,gBAAgB,CAAC;aAChC;YACD,MAAM,OAAO,GAAG,CAAC,SAAS,EAAE,iBAAiB,EAAE,SAAS,CAAC,CAAC;YAC1D,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC/B,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;oBACzB,OAAO;iBACR;gBACD,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,sBAAsB,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAC7E,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;YACvC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAC/B,IAAI,CAAC,QAAQ,CAAC;gBACZ,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,cAAc;gBACxB,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;aACxC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"create-package-json.js","sourceRoot":"","sources":["../../src/plugins/create-package-json.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAE1E,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAQ,EAAE;IACzC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,OAAO;QACL,IAAI,EAAE,qBAAqB;QAC3B,cAAc,CAAC,aAAkC;YAC/C,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;gBACzB,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACxE,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;YAC5E,MAAM,MAAM,GAAwB;gBAClC,IAAI,EAAE,EAAE;gBACR,OAAO,EAAE,EAAE;gBACX,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,oBAAoB;gBAC3B,KAAK,EAAE,aAAa;aACrB,CAAC;YACF,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnB,MAAM,CAAC,MAAM,GAAG,gBAAgB,CAAC;gBACjC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBACrB,MAAM,CAAC,IAAI,GAAG,gBAAgB,CAAC;gBACjC,CAAC;YACH,CAAC;YACD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpB,MAAM,CAAC,IAAI,GAAG,gBAAgB,CAAC;YACjC,CAAC;YACD,MAAM,OAAO,GAAG,CAAC,SAAS,EAAE,iBAAiB,EAAE,SAAS,CAAC,CAAC;YAC1D,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC/B,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC1B,OAAO;gBACT,CAAC;gBACD,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC;YACH,MAAM,KAAK,GAAG,sBAAsB,CAAC,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAC7E,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;YACvC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAC/B,IAAI,CAAC,QAAQ,CAAC;gBACZ,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,cAAc;gBACxB,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;aACxC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}
@@ -1,9 +1,9 @@
1
- import dts from "vite-plugin-dts";
2
- export function generateTypes(entry, outDir) {
3
- return dts({
4
- entryRoot: entry,
5
- outDir
6
- });
7
- }
8
- ;
1
+ import dts from "vite-plugin-dts";
2
+ export function generateTypes(entry, outDir) {
3
+ return dts({
4
+ entryRoot: entry,
5
+ outDir
6
+ });
7
+ }
8
+ ;
9
9
  //# sourceMappingURL=dts.js.map
@@ -1,12 +1,12 @@
1
- export const htmlSystemPlugin = () => {
2
- return {
3
- name: 'html-transform-system',
4
- transformIndexHtml(html) {
5
- const regexp = /<script.*type="module".*src="(.*?)"><\/script>/;
1
+ export const htmlSystemPlugin = () => {
2
+ return {
3
+ name: 'html-transform-system',
4
+ transformIndexHtml(html) {
5
+ const regexp = /<script.*type="module".*src="(.*?)"><\/script>/;
6
6
  return html.replace(regexp, (str, p1) => `
7
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
- };
8
+ <script >System.import("${p1}");</script>`);
9
+ }
10
+ };
11
+ };
12
12
  //# sourceMappingURL=html-system.js.map
@@ -1,18 +1,18 @@
1
- import { getPackageName } from '../common/constant.js';
2
- export function replace(path) {
3
- return {
4
- name: 'farris-replace-path',
5
- renderChunk(code, chunk) {
6
- const fileNames = chunk.fileName.split('.');
7
- const format = fileNames[fileNames.length - 2];
8
- // const regExpress = new RegExp(/@farris\/mobile-ui-vue\/([\w-]+)/g);
9
- const dynamicRegExp = new RegExp(`${getPackageName().replace(/\//g, '\\/')}\\/([\\w-]+)`, // 自动转义斜杠
10
- 'g');
11
- return code.replace(dynamicRegExp, (match, captureGroup) => {
12
- return path(format, [captureGroup]);
13
- });
14
- }
15
- };
16
- }
17
- ;
1
+ import { getPackageName } from '../common/constant.js';
2
+ export function replace(path) {
3
+ return {
4
+ name: 'farris-replace-path',
5
+ renderChunk(code, chunk) {
6
+ const fileNames = chunk.fileName.split('.');
7
+ const format = fileNames[fileNames.length - 2];
8
+ // const regExpress = new RegExp(/@farris\/mobile-ui-vue\/([\w-]+)/g);
9
+ const dynamicRegExp = new RegExp(`${getPackageName().replace(/\//g, '\\/')}\\/([\\w-]+)`, // 自动转义斜杠
10
+ 'g');
11
+ return code.replace(dynamicRegExp, (match, captureGroup) => {
12
+ return path(format, [captureGroup]);
13
+ });
14
+ }
15
+ };
16
+ }
17
+ ;
18
18
  //# sourceMappingURL=replace.js.map
@@ -1,16 +1,16 @@
1
- export function systemjsBundle() {
2
- return {
3
- name: 'systemjs-bundle',
4
- outputOptions(options) {
5
- if (options.format === 'systemjs') {
6
- return {
7
- ...options,
8
- name: undefined
9
- };
10
- }
11
- return options;
12
- }
13
- };
14
- }
15
- ;
1
+ export function systemjsBundle() {
2
+ return {
3
+ name: 'systemjs-bundle',
4
+ outputOptions(options) {
5
+ if (options.format === 'systemjs') {
6
+ return {
7
+ ...options,
8
+ name: undefined
9
+ };
10
+ }
11
+ return options;
12
+ }
13
+ };
14
+ }
15
+ ;
16
16
  //# sourceMappingURL=systemjs-bundle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"systemjs-bundle.js","sourceRoot":"","sources":["../../src/plugins/systemjs-bundle.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc;IAC5B,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,aAAa,CAAC,OAAY;YACxB,IAAG,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE;gBAChC,OAAO;oBACL,GAAG,OAAO;oBACV,IAAI,EAAE,SAAS;iBAChB,CAAC;aACH;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC;AAAA,CAAC"}
1
+ {"version":3,"file":"systemjs-bundle.js","sourceRoot":"","sources":["../../src/plugins/systemjs-bundle.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc;IAC5B,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,aAAa,CAAC,OAAY;YACxB,IAAG,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBACjC,OAAO;oBACL,GAAG,OAAO;oBACV,IAAI,EAAE,SAAS;iBAChB,CAAC;YACJ,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC;AAAA,CAAC"}
package/package.json CHANGED
@@ -1,18 +1,19 @@
1
1
  {
2
2
  "name": "@farris/cli",
3
3
  "private": false,
4
- "version": "2.2.0-beta.1",
4
+ "version": "2.2.0",
5
5
  "type": "module",
6
6
  "typings": "lib/index.d.ts",
7
7
  "bin": {
8
8
  "farris-cli": "./bin/index.js"
9
9
  },
10
10
  "engines": {
11
- "node": ">=18.0.0"
11
+ "node": "^18.0.0 || >=20.0.0",
12
+ "pnpm": ">=9.0.0"
12
13
  },
13
14
  "scripts": {
14
15
  "build": "rimraf ./lib && tsc",
15
- "test": "vitest run"
16
+ "test": "vitest run --config vitest.config.ts"
16
17
  },
17
18
  "files": [
18
19
  "lib",
@@ -27,18 +28,20 @@
27
28
  "commander": "^9.4.0",
28
29
  "esbuild": "^0.23.0",
29
30
  "esbuild-sass-plugin": "^3.3.1",
31
+ "fs-extra": "^11.2.0",
32
+ "glob": "^10.4.5",
30
33
  "inquirer": "^9.3.0",
31
34
  "ora": "^8.0.1",
32
- "typescript": "^4.6.4",
33
- "vite": "^4.5.10",
35
+ "typescript": "^5.7.3",
36
+ "vite": "^5.4.19",
34
37
  "vite-plugin-css-injected-by-js": "^3.5.2",
35
- "vite-plugin-dts": "^3.9.1",
36
- "glob": "11.0.3"
38
+ "vite-plugin-dts": "^3.9.1"
37
39
  },
38
40
  "devDependencies": {
41
+ "@types/fs-extra": "^11.0.4",
39
42
  "@types/inquirer": "^9.0.7",
40
43
  "rimraf": "^5.0.7",
41
44
  "vitest": "^1.6.1",
42
- "vue": "^3.2.37"
45
+ "vue": "^3.5.13"
43
46
  }
44
- }
47
+ }
@@ -0,0 +1,85 @@
1
+ image: registry.inspures.com/public/docker.io/library/node:22
2
+
3
+ variables:
4
+ PROJECT_ROOT: "."
5
+ NPM_REGISTRY: "https://repos.iec.io/repository/npm-igix/"
6
+ NPM_RELEASE_REGISTRY: "https://repos.iec.io/repository/npm-igix-release/"
7
+
8
+ stages:
9
+ - pre
10
+ - build
11
+ - publish
12
+ - publishproject
13
+
14
+ pre-job:
15
+ stage: pre
16
+ tags:
17
+ - environment:cloud
18
+ script:
19
+ - export commit_author=$(git log -1 --pretty=format:%an)
20
+ - export commit_email=$(git log -1 --pretty=format:%ce)
21
+
22
+ build-job:
23
+ stage: build
24
+ tags:
25
+ - environment:cloud
26
+ before_script:
27
+ - |
28
+ if [ -z "${ARTIFACTS_REPO_USERNAME}" ] || [ -z "${ARTIFACTS_REPO_PASSWORD}" ]; then
29
+ echo "ARTIFACTS_REPO_USERNAME or ARTIFACTS_REPO_PASSWORD is empty on ${CI_COMMIT_REF_NAME}."
30
+ echo "If these GitLab CI/CD variables are Protected, they are not available on unprotected branches."
31
+ exit 1
32
+ fi
33
+ - if [ ! -f .npmrc ]; then wget -O - https://repos.iec.io/gitlab-ci/template/experimental/script/npmrc | sh; fi
34
+ - echo _auth=$(echo -n ${ARTIFACTS_REPO_USERNAME}:${ARTIFACTS_REPO_PASSWORD} | base64) >> .npmrc
35
+ - echo always-auth=true >> .npmrc
36
+ - sed -i "s#registry=.*#registry=$NPM_REGISTRY#g" $CI_PROJECT_DIR/.npmrc
37
+ - cp .npmrc ~/
38
+ - npm config fix
39
+ script:
40
+ - npm i --no-package-lock
41
+ - npm test
42
+ - npm run build
43
+ artifacts:
44
+ expire_in: '5days'
45
+ name: 'dist'
46
+ paths:
47
+ - $CI_PROJECT_DIR/lib
48
+
49
+ publish-one:
50
+ stage: publish
51
+ tags:
52
+ - environment:cloud
53
+ only:
54
+ refs:
55
+ - cicd
56
+ changes:
57
+ - package.json
58
+ before_script:
59
+ - |
60
+ if [ -z "${ARTIFACTS_REPO_USERNAME}" ] || [ -z "${ARTIFACTS_REPO_PASSWORD}" ]; then
61
+ echo "ARTIFACTS_REPO_USERNAME or ARTIFACTS_REPO_PASSWORD is empty on ${CI_COMMIT_REF_NAME}."
62
+ echo "If these GitLab CI/CD variables are Protected, they are not available on unprotected branches."
63
+ exit 1
64
+ fi
65
+ - if [ ! -f .npmrc ]; then wget -O - https://repos.iec.io/gitlab-ci/template/experimental/script/npmrc | sh; fi
66
+ - echo _auth=$(echo -n ${ARTIFACTS_REPO_USERNAME}:${ARTIFACTS_REPO_PASSWORD} | base64) >> .npmrc
67
+ - echo always-auth=true >> .npmrc
68
+ - sed -i "s#registry=.*#registry=$NPM_RELEASE_REGISTRY#g" $CI_PROJECT_DIR/.npmrc
69
+ - cp .npmrc ~/
70
+ - npm config fix
71
+ script:
72
+ - npm config set //repos.iec.io/repository/npm-igix-release/:_auth=$(echo -n ${ARTIFACTS_REPO_USERNAME}:${ARTIFACTS_REPO_PASSWORD} | base64)
73
+ - cd lib && npm publish
74
+
75
+ publish-project:
76
+ stage: publishproject
77
+ tags:
78
+ - environment:cloud
79
+ only:
80
+ refs:
81
+ - cicd
82
+ changes:
83
+ - project.json
84
+ script:
85
+ - echo "skip publishproject, lib has no project.json"
@@ -1,17 +1,3 @@
1
1
  # <%= name %>
2
2
 
3
- ## Scripts
4
-
5
- - `npm run build` — `build-lib` then `build-css` (css after lib so Vite does not wipe `index.css`)
6
- - `npm run changeset` — record a change
7
- - `npm run version` — bump version and changelog
8
-
9
- If the default branch is not `main`, edit `.changeset/config.json` `baseBranch`.
10
-
11
- ## Output
12
-
13
- Artifacts go to `lib/` (`index.esm.js` / `index.umd.js` / `index.systemjs.js` depending on formats, plus `types/` and `index.css`).
14
-
15
- ## Add a component
16
-
17
- Copy `components/button` to a new folder and re-export it from `components/index.ts`.
3
+ `src/` 是本地演示应用,执行 `npm run dev` 启动。发布到 npm 的组件源码在 `components/`,执行 `npm run build` 打包。
@@ -0,0 +1,8 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { Button } from './index';
3
+
4
+ describe('Button', () => {
5
+ it('exports a component', () => {
6
+ expect(Button).toBeTruthy();
7
+ });
8
+ });
@@ -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>Lib Demo</title>
7
+ </head>
8
+ <body>
9
+ <div id="app"></div>
10
+ <script type="module" src="/src/main.ts"></script>
11
+ </body>
12
+ </html>
@@ -4,7 +4,10 @@
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "scripts": {
7
+ "dev": "farris-cli dev",
7
8
  "build": "farris-cli build-lib -ep && farris-cli build-components",
9
+ "test": "vitest run",
10
+ "test:watch": "vitest",
8
11
  "changeset": "changeset",
9
12
  "version": "changeset version"
10
13
  },
@@ -15,7 +18,9 @@
15
18
  "@changesets/cli": "^2.29.5",
16
19
  "@farris/cli": "<%= cliVersion %>",
17
20
  "@vue/tsconfig": "^0.5.1",
21
+ "@vitejs/plugin-vue": "^4.0.0",
18
22
  "typescript": "~5.4.0",
19
- "vue": "^3.4.29"
23
+ "vue": "^3.4.29",
24
+ "vitest": "^1.6.1"
20
25
  }
21
26
  }
@@ -0,0 +1,7 @@
1
+ <script setup lang="ts">
2
+ import { Button } from '../components';
3
+ </script>
4
+
5
+ <template>
6
+ <Button type="primary">Lib demo</Button>
7
+ </template>
@@ -0,0 +1,4 @@
1
+ import { createApp } from 'vue';
2
+ import App from './App.vue';
3
+
4
+ createApp(App).mount('#app');
@@ -0,0 +1,9 @@
1
+ import vue from '@vitejs/plugin-vue';
2
+ import { defineConfig } from 'vitest/config';
3
+
4
+ export default defineConfig({
5
+ plugins: [vue()],
6
+ test: {
7
+ include: ['components/**/*.spec.ts']
8
+ }
9
+ });
@@ -0,0 +1,88 @@
1
+ image: registry.inspures.com/public/docker.io/library/node:22
2
+
3
+ variables:
4
+ PROJECT_ROOT: "."
5
+ NPM_REGISTRY: "https://repos.iec.io/repository/npm-igix/"
6
+ NPM_RELEASE_REGISTRY: "https://repos.iec.io/repository/npm-igix-release/"
7
+
8
+ stages:
9
+ - pre
10
+ - build
11
+ - publish
12
+ - publishproject
13
+
14
+ pre-job:
15
+ stage: pre
16
+ tags:
17
+ - environment:cloud
18
+ script:
19
+ - export commit_author=$(git log -1 --pretty=format:%an)
20
+ - export commit_email=$(git log -1 --pretty=format:%ce)
21
+
22
+ build-job:
23
+ stage: build
24
+ tags:
25
+ - environment:cloud
26
+ before_script:
27
+ - |
28
+ if [ -z "${ARTIFACTS_REPO_USERNAME}" ] || [ -z "${ARTIFACTS_REPO_PASSWORD}" ]; then
29
+ echo "ARTIFACTS_REPO_USERNAME or ARTIFACTS_REPO_PASSWORD is empty on ${CI_COMMIT_REF_NAME}."
30
+ echo "If these GitLab CI/CD variables are Protected, they are not available on unprotected branches."
31
+ exit 1
32
+ fi
33
+ - if [ ! -f .npmrc ]; then wget -O - https://repos.iec.io/gitlab-ci/template/experimental/script/npmrc | sh; fi
34
+ - echo _auth=$(echo -n ${ARTIFACTS_REPO_USERNAME}:${ARTIFACTS_REPO_PASSWORD} | base64) >> .npmrc
35
+ - echo always-auth=true >> .npmrc
36
+ - sed -i "s#registry=.*#registry=$NPM_REGISTRY#g" $CI_PROJECT_DIR/.npmrc
37
+ - cp .npmrc ~/
38
+ - npm config fix
39
+ script:
40
+ - npm i --no-package-lock
41
+ - npm test
42
+ - npm run build
43
+ artifacts:
44
+ expire_in: '5days'
45
+ name: 'dist'
46
+ paths:
47
+ - $CI_PROJECT_DIR/dist
48
+
49
+ publish-one:
50
+ stage: publish
51
+ tags:
52
+ - environment:cloud
53
+ only:
54
+ refs:
55
+ - cicd
56
+ changes:
57
+ - packages/**/package.json
58
+ script:
59
+ - echo "skip publish-one, app package is private"
60
+
61
+ publish-project:
62
+ stage: publishproject
63
+ tags:
64
+ - environment:cloud
65
+ only:
66
+ refs:
67
+ - cicd
68
+ changes:
69
+ - project.json
70
+ before_script:
71
+ - |
72
+ if [ -z "${ARTIFACTS_REPO_USERNAME}" ] || [ -z "${ARTIFACTS_REPO_PASSWORD}" ]; then
73
+ echo "ARTIFACTS_REPO_USERNAME or ARTIFACTS_REPO_PASSWORD is empty on ${CI_COMMIT_REF_NAME}."
74
+ echo "If these GitLab CI/CD variables are Protected, they are not available on unprotected branches."
75
+ exit 1
76
+ fi
77
+ - if [ ! -f .npmrc ]; then wget -O - https://repos.iec.io/gitlab-ci/template/experimental/script/npmrc | sh; fi
78
+ - echo _auth=$(echo -n ${ARTIFACTS_REPO_USERNAME}:${ARTIFACTS_REPO_PASSWORD} | base64) >> .npmrc
79
+ - echo always-auth=true >> .npmrc
80
+ - sed -i "s#registry=.*#registry=$NPM_RELEASE_REGISTRY#g" $CI_PROJECT_DIR/.npmrc
81
+ - cp .npmrc ~/
82
+ - npm config fix
83
+ script:
84
+ - npm config set //repos.iec.io/repository/npm-igix-release/:_auth=$(echo -n ${ARTIFACTS_REPO_USERNAME}:${ARTIFACTS_REPO_PASSWORD} | base64)
85
+ - cp ./project.json ./dist
86
+ - cd ./dist
87
+ - mv ./project.json ./package.json
88
+ - npm publish
@@ -9,6 +9,8 @@
9
9
  "preview": "farris-cli preview",
10
10
  "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore",
11
11
  "format": "prettier --write src/",
12
+ "test": "vitest run",
13
+ "test:watch": "vitest",
12
14
  "changeset": "changeset",
13
15
  "version": "changeset version"
14
16
  },
@@ -24,9 +26,11 @@
24
26
  "@vue/eslint-config-prettier": "^9.0.0",
25
27
  "@vue/eslint-config-typescript": "^13.0.0",
26
28
  "@vue/tsconfig": "^0.5.1",
29
+ "@vitejs/plugin-vue": "^4.0.0",
27
30
  "eslint": "^8.57.0",
28
31
  "eslint-plugin-vue": "^9.23.0",
29
32
  "prettier": "^3.2.5",
30
- "typescript": "~5.4.0"
33
+ "typescript": "~5.4.0",
34
+ "vitest": "^1.6.1"
31
35
  }
32
36
  }
@@ -0,0 +1,4 @@
1
+ {
2
+ "name": "<%= projectPackageName %>",
3
+ "version": "0.0.0"
4
+ }
@@ -0,0 +1,8 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import TheButton from './TheButton.vue';
3
+
4
+ describe('TheButton', () => {
5
+ it('exports a component', () => {
6
+ expect(TheButton).toBeTruthy();
7
+ });
8
+ });
@@ -0,0 +1,9 @@
1
+ import vue from '@vitejs/plugin-vue';
2
+ import { defineConfig } from 'vitest/config';
3
+
4
+ export default defineConfig({
5
+ plugins: [vue()],
6
+ test: {
7
+ include: ['src/**/*.spec.ts']
8
+ }
9
+ });