Rollup, Vue and Buble, unexpected token in scss file

前端 未结 2 1356
日久生厌
日久生厌 2021-01-24 12:33

I am trying to compile SFC with rollup, using Vue and Buble, following the example suplied in the Vue official page. But I keep getting this error:

src/wrapper.j         


        
相关标签:
2条回答
  • 2021-01-24 13:26

    Try this:

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

    In rollup.config.js:

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

    I don't really know what's going on, here. The above worked for me (Vue.js 3 (beta) and rollup-plugin-vue 6.0.0-beta.6.

    0 讨论(0)
  • 2021-01-24 13:26
    // 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;
    

    Hope this will generate esm bundle for the entry

    0 讨论(0)
提交回复
热议问题