javascript - Rollup,多个文件,多个文件中相同的常量名称: error in browser: Uncaught SyntaxError: Identifier 'o' has already been declared

标签 javascript constants minify rollupjs terser

我有一个问题。

说明

在我在页面/one 上导航的网站中,one.js 文件中的代码执行良好。

过了一会儿,我在页面中插入(pjax、ajax:无论如何)two.js 文件中的第二个代码。

浏览器提示此错误:

Uncaught SyntaxError: Identifier 'o' has already been declared
- at two.js:1

复制和源代码

  1. rollup.config.js:

    import resolve from 'rollup-plugin-node-resolve'
    import commonjs from 'rollup-plugin-commonjs'
    import { terser } from 'rollup-plugin-terser'
    import multiInput from 'rollup-plugin-multi-input'
    
    export default {
      input: ['src/**/*.js'],
      output: {
        format: 'esm',
        dir: 'dist/js'
      },
      plugins: [
        multiInput({ relative: 'src' }),
        resolve({ browser: true }),
        commonjs(),
        terser()
      ]
    }
    
  2. src/one.js:

    const names1 = ['john1', 'carl1', 'bob1']
    names1.forEach(name1 => {
      console.log('name1:', name1, ', in names1:', ...names1)
    })
    
  3. src/two.js:

    const names2 = ['john2', 'carl2', 'bob2']
    names2.forEach(name2 => {
      console.log('name2:', name2, ', in names2:', ...names2)
    })
    
  4. dist/js/one.js:

    const o=["john1","carl1","bob1"];o.forEach(n=>{console.log("name1:",n,", in names1:",...o)});
    
  5. dist/js/two.js:

    const o=["john2","carl2","bob2"];o.forEach(n=>{console.log("name2:",n,", in names2:",...o)});
    

问题

如何解决这个问题?

我们可以根据文件名为常量名称“添加前缀”吗?

当然,如果我将所有内容都放在 one.js 文件中,它可以工作,但由于项目的结构,这是不可能的。

最佳答案

您选择了output.format: 'esm',这使得 Rollup 假定代码位于它们自己的模块范围内。如果您将它们插入页面中

 <script type="module" src="/dist/js/one.js"></script>
 <script type="module" src="/dist/js/two.js"></script>

我希望它们能够工作。如果您不想使用 type="module",请为 Rollup 使用不同的输出格式,这会将它们包装在模块模式(或 IIFE)中,以赋予它们自己的范围。

关于javascript - Rollup,多个文件,多个文件中相同的常量名称: error in browser: Uncaught SyntaxError: Identifier 'o' has already been declared,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57843191/

相关文章:

javascript - ChartJS,禁用多图数据上的一个图的工具提示

javascript - 使用不同大小的图像调整 slider 大小

javascript - Nodejs 异步 waterfall 回调函数未定义

常量元素与常量数组

c++ - 指向限定和非限定类型表示的指针

javascript - 从 JavaScript 文件中删除未使用的函数

javascript - javascript 中基于对象的开关替代方案

electron - Electron 生成器是缩小代码还是我必须自己做?

asp.net - 将 ASP.NET 捆绑设置为不删除第三方版权

c++ - 所有常量都有静态持续时间吗?