gpt4 book ai didi

node.js - 如何在 Webpack 构建和 NodeJS 服务器进程之间共享代码?

转载 作者:行者123 更新时间:2023-12-04 08:54:40 25 4
gpt4 key购买 nike

我的应用程序具有或多或少这样的目录结构:

  • src-program/ - 包含前端代码,包括 package.jsonwebpack.config.js
  • src-server/ - 包含包含不同 package.json 的后端代码和 .babelrc
  • shared/foo.js - 是前端和后端都需要的 JavaScript 代码

  • 所有代码都使用 ES2015 语法,因此使用 Babel 进行转译.

    对于前端,“转译”是在 Webpack 构建期间使用 babel-loader 完成的。 .

    对于后端,它由 babel-register 即时完成。 .
    shared/foo.js需要在 package.json 中找到的其他模块前端和后端的文件。

    由于 NodeJS/Webpack 解析模块的方式,无法正常找到共享模块。

    对于 Webpack,我使用以下配置以一种有点 hacky 的方式解决了这个问题:
    resolve: {
    root: __dirname,
    fallback: [
    __dirname + "/../shared",
    __dirname + "/node_modules"

    ],
    extensions: ['', '.js', '.jsx']
    },

    第一个 fallback确保“共享”模块已解析,第二个 fallback确保共享模块所需的模块仍然解析到前端 node_modules目录。

    这允许像这样简单地包含共享模块:
    import * as foo from 'foo';

    但是,我很难制作 后台 (即 NodeJS)以相同的方式解析共享模块。

    我试过 app-module-path ,这使得 foo.js解决,但该文件要么不被 Babel 或其他 Babel 模块处理,如 transform-runtime ( foo.js 间接需要)无法解决,因为它们位于 src-server/node_modules 中...

    我可以通过预编译代码而不是使用 babe-register 来解决这个问题。但这一切都感觉不对劲。

    所以, 在 Webpack 构建和 NodeJS 服务器进程之间共享代码的好方法是什么 ?

    最佳答案

    您可以将共享模块打包为 npm 包(甚至是仅驻留在文件系统上的包)?然后你的src-programsrc-server项目可以将其作为依赖项添加到他们的package.json 中。 ,它将被复制到各自的node_modules文件夹。

    见:how to specify local modules as npm package dependencies

    关于node.js - 如何在 Webpack 构建和 NodeJS 服务器进程之间共享代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39750943/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com