rollup 打包vue3 + ts 组件库报错
[@vue/compiler-sfc] No fs option provided to compileScript
in non-Node environment. File system access is required for resolving imported types.
重新安装依赖,更换rollup-plugin-vue版本。
<script lang="ts" setup>import { computed, withDefaults } from 'vue';import { Watermark, type WatermarkProps } from 'ant-design-vue';defineOptions({ name: 'WaterMarkComp' });const defaultColor = 'rgba(0, 0, 0, .08)';// rollup 打包报错const props = withDefaults(defineProps<WatermarkProps & { nickname?: string; mobile?: string }>(), { gap: () => [50, 80], rotate: -20, font: () => ({ color: defaultColor, fontSize: 20 }), user: () => ({ nickname: '', mobile: ''})});// rollup 正确运行// const props = defineProps({// gap: {// type: Object,// default: () => [50, 80]// },// rotate: {// type: Number,// default: -20// },// font: () => ({// color: defaultColor,// fontSize: 20,// }),// user: {// type: Object,// default: () => ({ nickname: '', mobile: ''})// }// });const defaultPrams = computed<any>(() => { const { nickname = '', mobile = '' } = props.user || {}; const suffixAfter = `${mobile}`.slice(-4); return { ...props, font: { color: defaultColor, ...props.font }, content: `${nickname} ${suffixAfter}` };});</script><template> <Watermark class="water-mark" v-bind="{ ...defaultPrams, ...$attrs }"> <slot /> </Watermark></template><style scoped>.water-mark { box-sizing: border-box; width: 100%; height: 100%;}</style>
rollup 配置
import { defineConfig } from 'rollup';import nodeResolve from '@rollup/plugin-node-resolve'; // 找到模块并打包它们import path from 'path';import commonjs from '@rollup/plugin-commonjs';import json from '@rollup/plugin-json'; // 它允许 Rollup 从 JSON 文件中导入数据。import babel from '@rollup/plugin-babel'; // 它允许 Rollup 从 JSON 文件中导入数据。import terser from '@rollup/plugin-terser';import alias from "@rollup/plugin-alias";import rollUpTypescript from 'rollup-plugin-typescript2';import progress from 'rollup-plugin-progress';import postcss from 'rollup-plugin-postcss'import vuePlugin from 'rollup-plugin-vue';// import less from 'rollup-plugin-less';import clear from 'rollup-plugin-clear';// import css from 'rollup-plugin-css-only';import packageJson from "./package.json"; // assert { type: "json" };// const packageJson = require('./package.json');import { fileURLToPath } from 'url';// import eslint from "@rollup/plugin-eslint";// import { getFileList } from './build/file.build.ts';const __filename = fileURLToPath(import.meta.url);const __dirname = path.dirname(__filename);const pathResolve = (p) => path.resolve(__dirname, p);const extensions = ['.js', '.jsx', '.ts', '.tsx'];const globalsConfig = { 'vue': "Vue", 'lodash-es': 'lodashEs', 'tyndSchema': 'TyndSchema', 'ant-design-vue': 'antDesignVue'};export default defineConfig({ input: 'src/index.ts', external: ['lodash-es', 'vue', 'ant-design-vue'], // 依赖模块 output: [ { // dir: 'dist', file: packageJson.main, format: 'cjs', banner: '/* this is jiangshan webgroup components ' + '1.0.1' + ' */', footer: '/* this author is beisir */', globals: globalsConfig // assetFileNames: '[name]-[hash][extname]', // chunkFileNames: '[name]-[hash].js', // entryFileNames: 'dist/index-[name].cjs.js' // sourcemap: true, // exports: 'auto' }, { name: 'ui-schema', file: packageJson.module, format: 'es', globals: globalsConfig, }, { name: 'ui-schema', // 当入口文件有export时,'umd'格式必须指定name file: 'dist/index-umd.js', format: 'umd', globals: globalsConfig, }, { file: 'dist/index-min.js', format: 'iife', name: 'tyndSchemaMin', plugins: [terser()], globals: globalsConfig } ], // acornInjectPlugins: [jsx()], plugins: [ clear({ targets: ['dist'], verbose: true, before: true }), rollUpTypescript({ // check: false useTsconfigDeclarationDir: true // 示使用根目录的 文件作为 typescript 编译配置文件 }), // css({ output: 'bundle.css' }), // eslint({ // throwOnError: true, // include: ['src/**/*.ts'], // exclude: ['node_modules/**', 'lib/**'], // }), nodeResolve({ extensions: extensions }), alias({ entries: { "@": pathResolve("src"), _: __dirname, }, }), vuePlugin({ target: 'browser' }), // less(), postcss({ extensions: ['.css', '.less'], extract: 'css/index.css', // use: ['less'], // modules: true }), commonjs(), babel({ // 使用 Babel 将 JSX 和 Flow 转换为 JavaScript // babelHelpers: 'runtime', babelHelpers: 'bundled', extensions: extensions, exclude: 'node_modules/**' }), json(), progress({ clearOnComplete: false }) ]});
rollup-plugin-vue
替换为 @vitejs/plugin-vue
(先安装) 试试
- import vuePlugin from 'rollup-plugin-vue';+ import vuePlugin from '@vitejs/plugin-vue'
我目前正在为一家公司构建一个Vue UI组件库,在这个过程中,我使用webpack作为默认绑定程序。我想把整个项目构建成一个npm包,然后可以通过一个私有的git包存储库分发。包分发已经启动并运行,但我似乎无法以正确的方式导出组件,以便在另一个项目中使用。 使用的不同工具的版本: 国家预防机制:6.14.4 节点:12.17.0 纱线:1.22.0 @VUE/CLI:4.4.1 TSC:3.9.5
使用 typescript 开发,在一次 build 中 进行到 check-types 时遇到如下报错 在这里看大家如何解决:https://stackoverflow.com/questions/76996326/parsing-error-deprecationerror-originalkeywordkind-has-been-deprecated-since
提示这个错误,我看官网文档都是这么写 typeScript版本5.0.4的
在将typescript与单文件组件一起使用时,我很难从Vue应用程序外部调整数据。 我有一个声明了新Vue的,但是将其分配给一个变量并不能给我该变量可用。所以在Main.ts不工作 我尝试在我的file,我知道我可以用但它没有在中声明的变量。vue文件,仅当我在文件,我看到了它们,但组件模板无法呈现它们。 主要的ts: 应用程序。vue脚本: 当我看到JavaScript实现时,我可以从控制台通
使用汇总打包Vue组件时,会出现此错误: 卷起来。配置。js: 按钮vue: 有解决办法吗? 所以我找到了一个更好的方法: 最好使用vue sfc汇总来打包vue组件。