我收到未定义的包,即使它们在我的 package.json 和 node_modules 文件夹中

I'm getting undefined packages even though I have them in my package.json and node_modules folder

所以我正在开发一个使用 NestJS 作为后端的网络应用程序。我还使用 docker 来构建我所有的后端。我遇到一个问题,一些已安装的软件包记录为“未定义”,而其他一些则正常工作。

例如在我的 CreateUser class 我有

import bcrypt from 'bcrypt';

@Injectable()
export class CreateUser {
  constructor(
    @InjectRepository(User)
    private usersRepo: Repository<User>,
  ) {}

  async execute(input: CreateUserInput): Promise<User> {
    console.log('bcrypt', bcrypt);
    const user = this.usersRepo.create(input);
    user.email = input.email.trim().toLowerCase();
    user.password = await bcrypt.hash(input.password, 10);
    const newUser = await this.usersRepo.save(user);
    return newUser;
  }

当我执行这个函数时,它会记录这个

bcrypt undefined
data TypeError: Cannot read property 'hash' of undefined

但是如果我去 node_modules 我已经安装了 bcrypt 模块。我的 package.json

也是如此

我认为这是一个 docker 问题,但我已经进入容器并检查了 node_modules 文件夹,它也安装在那里。这是我的 docker 文件以防万一

FROM node:12-alpine

ENV NODE_ENV development

RUN mkdir -p /usr/src/app

WORKDIR /usr/src/app

COPY package.json package-lock.json /usr/src/app/

RUN npm install

COPY . .

ENTRYPOINT ["npm", "run", "start:dev"]

为什么我不能使用这个包有什么想法吗?

你应该这样做

import {hash} from 'bcrypt'

然后

 user.password = await hash(input.password, 10);

了解更多请参考:https://learnjsx.com/category/2/posts/es6-javaScript