javascript - Node.js + Typescript + Webpack = 找不到模块

标签 javascript node.js typescript webpack webpack-2

我是 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

项目的架构是:

enter image description here

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

最佳答案

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

npm install --save hapi

一旦你安装了它,就可以找到模块,尽管你会得到一个新的错误,即 ./server could not be resolved in hapi/lib/index.js 那是因为您将 resolve.extensions 配置为仅包含 .ts,但是该库使用 Node 自动解析 .js当离开分机时。所以你还需要在扩展中包含 .js:

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

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

target: 'node'

编辑

您在使用其他 node_modules 时遇到问题,因为您只使用了顶级 node_modules,而您希望始终回退到 的常规模块解析node_modules,所以 resolve.modules应该是这样的:

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

关于javascript - Node.js + Typescript + Webpack = 找不到模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42579037/

相关文章:

javascript - jQuery:用动态 HTML 替换 HTML,而不是附加

javascript - 以下链式语句在 JavaScript 中意味着什么?

typescript - 在 vue3 中使用 headless ui 的 Modal

javascript - typescript + moment.js : error TS2307: Cannot find module 'moment'

javascript - 单击同一链接时使 Iron Router 重新加载页面

javascript - jqGrid:如何更改单元格填充

node.js - AWS ELB - 服务 A 无法连接到同一安全组内的服务 B

node.js - 在不同端口上运行前端和后端

angularjs - DefinitelyTyped: 'export = _;' 是什么意思

Javascript按子数组对数组数组进行排序