【问题标题】:Rollup, Vue and Buble, unexpected token in scss fileRollup,Vue 和 Buble,scss 文件中的意外标记
【发布时间】:2020-10-04 15:03:02
【问题描述】:

我正在尝试按照 Vue 官方页面中提供的示例,使用 Vue 和 Buble 使用汇总编译 SFC。但我不断收到此错误:

src/wrapper.js → dist/chat.min.js...
[!] (plugin buble) SyntaxError: Unexpected token (2:0)
src\components\Chat.vue?vue&type=style&index=0&lang.scss (2:0)
1 :
2 : .chat, .chat>*, .chat * {

这是我的 rollup.config.js:

import commonjs from '@rollup/plugin-commonjs'; // Convert CommonJS modules to ES6
import vue from 'rollup-plugin-vue'; // Handle .vue SFC files
import buble from '@rollup/plugin-buble'; // Transpile/polyfill with reasonable browser support
export default {
    input: 'src/wrapper.js', // Path relative to package.json
    output: {
        name: 'Chat',
        exports: 'named',
    },
    plugins: [
        commonjs(),
        vue({
            css: true, // Dynamically inject css as a <style> tag
            compileTemplate: true, // Explicitly convert template to render function
        }),
        buble(), // Transpile to ES5
    ],
};

这是我的 wrapper.js:

  // Import vue component
  import component from "./components/Chat.vue";

  // Declare install function executed by Vue.use()
  export function install(Vue) {
    if (install.installed) return;
    install.installed = true;
    Vue.component("chat", component);
  }

  // Create module definition for Vue.use()
  const plugin = {
    install
  };

  // Auto-install when vue is found (eg. in browser via <script> tag)
  let GlobalVue = null;
  if (typeof window !== "undefined") {
    GlobalVue = window.Vue;
  } else if (typeof global !== "undefined") {
    GlobalVue = global.Vue;
  }
  if (GlobalVue) {
    GlobalVue.use(plugin);
  }

  // To allow use as module (npm/webpack/etc.) export component
  export default component;

我已尝试从插件中删除 buble,但最终出现错误提示“意外令牌(请注意,您需要插件才能导入不是 JavaScript 的文件)”

【问题讨论】:

    标签: vue.js rollupjs bublejs


    【解决方案1】:

    试试这个:

    $ npm install --save-dev rollup-plugin-scss
    

    rollup.config.js:

    import scss from 'rollup-plugin-scss';      // handles '.css' and '.scss'
    
    plugins: { ..., scss() }
    

    我真的不知道发生了什么,这里。以上对我有用(Vue.js 3(测试版)和rollup-plugin-vue6.0.0-beta.6。

    【讨论】:

      【解决方案2】:
      // rollup.config.js
        import fs from 'fs';
        import path from 'path';
        import VuePlugin from 'rollup-plugin-vue';
        import alias from '@rollup/plugin-alias';
        import commonjs from '@rollup/plugin-commonjs';
        import replace from '@rollup/plugin-replace';
        import babel from 'rollup-plugin-babel';
        import minimist from 'minimist';
        import css from 'rollup-plugin-css-only';
      
        // Get browserslist config and remove ie from es build targets
        const esbrowserslist = fs.readFileSync('./.browserslistrc')
          .toString()
          .split('\n')
          .filter((entry) => entry && entry.substring(0, 2) !== 'ie');
      
        const argv = minimist(process.argv.slice(2));
      
        const projectRoot = path.resolve(__dirname, '..');
      
        const baseConfig = {
          input: 'src/entry.js',
          plugins: {
            preVue: [
              alias({
                resolve: ['.js', '.vue', '.css'],
                'vue$': require.resolve('vue/dist/vue.esm-bundler.js'),
                entries: {
                  '@': path.resolve(projectRoot, 'src')
                }
              }),
            ],
            replace: {
              'process.env.NODE_ENV': JSON.stringify('production'),
              'process.env.ES_BUILD': JSON.stringify('false'),
            },
            vue: {
              css: false,
              template: {
                isProduction: true,
              },
            },
            babel: {
              exclude: 'node_modules/**',
              extensions: ['.js', '.jsx', '.ts', '.tsx', '.vue'],
            }
          },
        };
      
        const external = [
          'vue',
        ];
      
      
        // Customize configs for individual targets
        const buildFormats = [];
        if (!argv.format || argv.format === 'es') {
          const esConfig = {
            ...baseConfig,
            external,
            output: {
              file: 'dist/vue3lib.esm.js',
              format: 'esm',
              exports: 'named',
            },
            plugins: [
              replace({
                ...baseConfig.plugins.replace,
                'process.env.ES_BUILD': JSON.stringify('true'),
              }),
              ...baseConfig.plugins.preVue,
              VuePlugin(baseConfig.plugins.vue),
              babel({
                ...baseConfig.plugins.babel,
                presets: [
                  [
                    '@babel/preset-env',
                    {
                      targets: esbrowserslist,
                    },
                  ],
                ],
              }),
              commonjs(),
              css()
            ],
          };
          buildFormats.push(esConfig);
        }
        // Export config
        export default buildFormats;
      

      希望这将为条目生成 esm 包

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-04-25
        • 2022-08-23
        • 1970-01-01
        • 2021-03-14
        • 2019-11-21
        • 2016-08-28
        • 2020-05-05
        相关资源
        最近更新 更多