【问题标题】:Use respective child's package's modules when executing bundle执行包时使用相应子包的模块
【发布时间】:2019-08-28 09:55:46
【问题描述】:

设置

我创建了一个包含 3 个 npm 包的项目;根、客户端和服务器。每个包都包含他们特别需要的依赖项; root 有构建工具,客户端有 react,服务器有 express - 你明白了。

现在...我意识到这可能是一个糟糕的主意,因为我失去了将它放在同一个地方的一些协同作用,但我意识到这是我这样做的部分原因。

/node_modules
/package.json
/webpack.config.js
/...etc

/dist
├── server-bundle.js
└── client-bundle.js

/client
├── node_modules/
├── package.json
└── src/

/server
├── node_modules/
├── package.json
└── src/
    └── index.ts

Webpack 配置:

module.exports = [
  {
    entry: "./client/src/index.tsx",
    mode: "development",
    output: {
      filename: "client-bundle.js",
      path: __dirname + "/dist"
    },
    devtool: "source-map",
    resolve: {
      extensions: [".ts", ".tsx", ".js", ".json"]
    },

    module: {
      noParse: /node_modules/,
      rules: [
        { test: /\.tsx?$/, loader: "ts-loader" },
        { enforce: "pre", test: /\.js$/, loader: "source-map-loader" }
      ]
    },
    externals: {
      "react": "React",
      "react-dom": "ReactDOM"
    },
  },
  {
    entry: "./server/src/index.ts",
    mode: "development",
    output: {
      filename: "server-bundle.js",
      path: __dirname + "/dist"
    },
    resolve: {
      extensions: [".ts", "tsx", ".js", ".json"]
    },

    module: {
      noParse: /node_modules/,
      rules: [
        { test: /\.tsx?$/, loader: "ts-loader" },
      ],
    },
  }
];

问题

构建和捆绑工作正常,但是在启动服务器 node dist/server-bundle.js 时,我收到节点 Cannot find the modules 'express' 的错误,因为根包没有这种依赖关系。

将所有依赖项移至根目录将解决所有问题。

问题

有什么方法可以使它与这种结构一起工作,还是我的概念方法有误?

【问题讨论】:

  • 为什么要捆绑服务器代码?
  • 好点,没有理由。我想我希望所有代码都经过相同的流程(在这种情况下为 webpack)。编辑:快速谷歌会让你知道捆绑后端的几个好处。

标签: javascript node.js typescript npm webpack


【解决方案1】:

只需将您的 /dist/s 移动到项目中,client/dist/server/dist/ 在您的情况下。

【讨论】:

    猜你喜欢
    • 2016-11-06
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    相关资源
    最近更新 更多