【问题标题】:package npm project written in flow打包npm项目用flow写成
【发布时间】:2018-09-18 16:58:32
【问题描述】:

我必须发布一个使用 Flow 编写并使用 babel 编译的 npm 包

我所做的是编译了所有源文件。然后我从 dist/ 复制编译文件并将它们放入其他目录。我还把 package.json 放在那里并对其进行了编辑,然后我在 npm 上发布了包。

然后我可以正常安装项目并在我的项目中使用它。但是,当我运行我的项目时,它会抛出我需要 babel-corebabel-polyfills 的错误(将它们安装为开发依赖项)。问题是因为我的新项目只需要我自己的包并且不使用 babel 或类似的东西,所以我认为在我的新项目中需要 babel 依赖项没有意义。

我的问题是,我如何打包我用 Flow 编写并由 babel 编译的库,以便我可以在其他地方使用这个包而不需要 babel。

【问题讨论】:

  • 它们是旧浏览器的 polyfills
  • 这是 node.js 使用的包,因此不需要浏览器兼容性,我不想强​​迫我包的用户在他们的项目中需要 babel,只是因为他们使用我的库

标签: javascript node.js npm babeljs flowtype


【解决方案1】:

您是否将 ma​​infiles 添加到您的 package.json 中?

https://docs.npmjs.com/files/package.json#main

https://docs.npmjs.com/files/package.json#files

你的文件应该是

"files": [
  "dist/**"
],

还可以防止安装您的软件包的用户需要安装转译器(即 babel)将它们添加到您的 devDependencies

直接来自https://docs.npmjs.com/files/package.json#dependencies

请不要将测试工具或转译器放在您的依赖项对象中。请参阅下面的 devDependencies

还要将流添加到您的 dist 添加https://github.com/AgentME/flow-copy-source

flow-copy-source -v src dist

【讨论】:

  • 是的,我做到了。该软件包有效 - 它是从 npm 安装的,我可以在我的项目中使用它,唯一的问题是因为我需要安装这两个 babel 依赖项,并且我想打包我的库而不需要用户安装这些依赖项
  • 您可以将 babel 依赖项移动到“devDependencies”,这样用户就不需要安装它们了
  • 但如果我这样做,那么当用户下载我的库时,由于缺少 babel 依赖项,它将失败。不知何故,编译后的版本仍然依赖于 babel,但我想摆脱它。
  • 你是如何构建你的dist的?
  • babel src -d dist 在我的 .babelrc 中:{ "presets": [ "env", "stage-0", "flow" ], "plugins": [ ["module-resolver", { "root": ["./src/"], }], "transform-class-properties", "transform-flow-strip-types" ] }
【解决方案2】:

问题在于使用了错误定义的预设 在我的 babelrc 中,我只定义了 preset: "env" 没有指定它需要在节点 8 及更高版本上运行,因为代码使用了异步。 因此我将预设定义为:

preset: ["env", {
    targets: {
        "node": "8.9.1"
    }
}

并且 asnyc 函数可以正确编译。

另外,感谢@Kenneth,我使用 flow-copy-source 将类型添加到我的库中,因此可以在 intelisense 中看到。

【讨论】:

    猜你喜欢
    • 2019-12-10
    • 2023-02-25
    • 2018-01-29
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    相关资源
    最近更新 更多