【问题标题】:NPM 7 workspaces with babel - importing between workspaces带有 babel 的 NPM 7 工作区 - 在工作区之间导入
【发布时间】:2021-06-02 01:12:27
【问题描述】:

我在使用 NPM 7 工作区和 Babel 时偶然发现了一个问题,我无法在开发过程中从 src/ 转到 import 而在生产过程中使用 dist/ 的最佳方法。

为我糟糕的解释道歉,我只是举个例子(为了简洁起见,这不包括配置文件等):

我的项目结构是这样的:

- /
  - lambdas/lambda-a
    - src/
    - package.json
  - packages/package-a
    - src/
    - package.json
  - package.json

我在packages/package-a/package.json 中有我的main 字段,如下所示:

{
  ...
  "main": "src/index.js",
  ...
}

这意味着我可以从packages/package-a 导入东西到lambdas/lambda-a/src/index.js 中就好了:

import { thing } from '<package-a>'

但是,通过将 main 字段指向 src/index.js,这将无法在生产中使用,如果我将 main 字段更改为 dist/index.js,我将无法再导入 lambdas/lambda-a在开发期间无需在每次更改后运行构建。

有人对此有解决方案吗?或者,更有可能的是,谁能指出我在哪里是布偶?

【问题讨论】:

  • 我们遇到了同样的问题,但我还没有找到可行的解决方案。我听说的一个是将构建过程直接转储到根文件夹中——这看起来很糟糕。但是,据我所知,由于 NPM 如何解析这些路径,这是唯一的解决方案。

标签: javascript node.js npm babeljs


【解决方案1】:

我使用的解决方法是在构建之前替换src/index.js,并在构建/打包完成后再次替换它。这既不优雅也不“你应该怎么做”(AFAIK),但它在一个小项目中对我有用。

我使用npe,因为它很轻量级,但也有类似(或更强大)的软件包。

示例 (packages/package-a/package.json):

...
"devDependencies": {
  "npe": "^1.1.4"
},
"scripts": {
  "build:before": "npe main dist/index.js'",
  "build": "(npm run build:before) && (if exist dist rmdir /s /q dist) && (babel src -d dist --copy-files) && (npm pack) && (npm run build:after)",
  "build:after": "npe main src/index.js",
},
...

但我也在寻找更“官方”的方式……

【讨论】:

    猜你喜欢
    • 2021-03-22
    • 2021-09-23
    • 1970-01-01
    • 2016-11-29
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2019-12-21
    • 2021-11-12
    相关资源
    最近更新 更多