代码之家  ›  专栏  ›  技术社区  ›  Daniel San

我应该在中使用浏览器字段吗包.json当编写将函数导出到全局对象的库时?

  •  1
  • Daniel San  · 技术社区  · 7 年前

    我正在开发一个javascript库,并在中设置了“browser”、“module”和“main”字段包.json,每个都有不同的入口点。

    // package.json
    "main": "./dist/umd/index.js",
    "browser": "./dist/browser/index.js",
    "module": "./dist/esm/index.js",
    ...
    

    const x = 42;
    const msg = match(x)
      .caseLessThan(0, "Negative values not allowed")
      .default(_ => `${_} items selected`);
               
    alert(msg);
    <script src="https://unpkg.com/x-match-expression/dist/browser/index.js"></script>

    问题是,当尝试在另一个带有webpack的项目中使用库时,默认情况下它使用“browser”入口点,并且函数没有正确解析,从而在运行时出现未定义错误。

    import {match} from "x-match-expression";
    const x = 42;
    const msg = match(x) // <--- match is undefined at runtime with default webpack settings
      .caseLessThan(0, "Negative values not allowed")
      .default(_ => `${_} items selected`);
    

    我知道可以通过设置在webpack中设置解析字段resolve.main字段但这对我的库用户来说是违反直觉的,所以我不得不删除包.json但我不知道有没有更好的方法。

    我应该在中使用“浏览器”字段吗package.json?或者我应该只提供浏览器包,但不在包.json与脚本标记一起使用?

    0 回复  |  直到 7 年前