【问题标题】:Node.js + Typescript + Webpack = Module not foundNode.js + Typescript + Webpack = 未找到模块
【发布时间】:2017-07-23 13:44:57
【问题描述】:

我是 Webpack、Node.js 和 Typescript 的新手,我在配置我的开发环境时遇到了麻烦。

运行webpack 编译我的src/server.ts 以生成/server/bundle.js 时出现此错误:

ERROR in ./src/server.ts
Module not found: Error: Can't resolve 'hapi' in '/Volumes/Dados/giovane/dev/studio-hikari/nodang/nodang-api/src'
 @ ./src/server.ts 3:11-26

项目的架构是:

src/server.ts:

import * as Hapi from 'hapi';

const server = new Hapi.Server();

webpack.config.js:

const path = require('path');

module.exports = {
  entry: './src/server.ts',
  output: {
    filename: './server/bundle.js'
  },
  resolve: {
    extensions: ['.ts'],
    modules: [
      path.resolve('src'),
      path.resolve('node_modules')
    ]
  },
  module: {
    loaders: [
      {
        test: /.ts$/,
        loader: 'awesome-typescript-loader'
      }
    ]
  }
};

package.json:

{
  "name": "nodang-api",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "compile": "webpack --progress --watch",
    "serve": "node-dev server/bundle.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@types/hapi": "^16.0.0",
    "lodash": "^4.17.4"
  },
  "devDependencies": {
    "awesome-typescript-loader": "^3.0.8",
    "tsd": "^0.6.5",
    "typescript": "^2.2.1",
    "webpack": "^2.2.1"
  }
}

OBS:它是 webpack 2

更新

在安装 hapi 并将 .js 添加到 webpack 的解析扩展和 node 作为 webpack 的目标之后,我在 hapi 模块中遇到了这个错误:

ERROR in ./~/hapi/lib/server.js
Module not found: Error: Can't resolve 'catbox' in '/Volumes/Dados/giovane/dev/studio-hikari/nodang/nodang-api/node_modules/hapi/lib'
 @ ./~/hapi/lib/server.js 5:15-32
 @ ./~/hapi/lib/index.js
 @ ./src/server.ts

ERROR in ./~/hapi/lib/server.js
Module not found: Error: Can't resolve 'catbox-memory' in '/Volumes/Dados/giovane/dev/studio-hikari/nodang/nodang-api/node_modules/hapi/lib'
 @ ./~/hapi/lib/server.js 6:21-45
 @ ./~/hapi/lib/index.js
 @ ./src/server.ts

【问题讨论】:

  • 你能显示你的 package.json 文件吗?
  • @AnyName 刚刚添加
  • test: /\.ts$/, 可能你会逃避.
  • @Jai 做到了,同样的事情
  • import * as Hapi from '@types/hapi';

标签: javascript node.js typescript webpack webpack-2


【解决方案1】:

您没有安装hapi@types/hapi 只是 TypeScript 用于库的类型定义,而不是实际的库本身。所以你还需要添加hapi

npm install --save hapi

一旦你安装了它,就可以找到该模块,虽然你会得到一个新的错误./server 无法在hapi/lib/index.js 中解决,那是因为你将resolve.extensions 配置为只包含.ts ,但库使用 Node 自动解析 .js 时离开扩展名。所以你还需要在扩展中包含.js

extensions: ['.ts', '.js'],

同样解决了这个问题后,你会遇到另一个问题,即无法解决像fs 这样的Node 内置模块。默认情况下,webpack 为 web 构建,因此 Node 内置模块不可用。但是您可以通过将 webpack 配置中的 target 选项设置为 node 来更改它:

target: 'node'

编辑

您在使用其他node_modules 时遇到问题,因为您只使用顶级node_modules,而不是您希望始终回退到node_modules 的常规模块分辨率,所以resolve.modules 应该看起来像这样:

modules: [
  path.resolve('src'),
  'node_modules'
]

【讨论】:

  • 很好的答案!我想问一个问题。使用 webpack 定位 node.js 有什么实际理由吗?谢谢
  • 我想主要原因是有一个生产版本,它只包含必要的(可以优化的)和运行应用程序所需的一切,就是捆绑包(当然还有节点),无需安装任何依赖项。
  • 太好了,现在它正在编译 hapi。但是我从 hapi 模块中得到了新的错误。
  • 我编辑了答案以解决该问题。我没有这个问题,因为我使用的是Yarn,它将这些依赖项安装到顶层,而不是 npm 所做的。
  • 伙计,你是我的英雄!一切正常!我只需要删除"typeRoots": ["node_modules"] 我放在tsconfig.json 上。
猜你喜欢
  • 2018-05-23
  • 2015-06-30
  • 2016-01-20
  • 2020-04-25
  • 2021-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
相关资源
最近更新 更多