我以这个帖子为例来回答我的问题:https://johns.codes/blog/building-typescript-node-apps-with-nix

我试着用NPM包来创建开发环境,但它没有任何类似功能. 我认为我离终点很近了,但我可能错过了一些重要的东西,它不起作用.

在文件夹 node -gyp-Build中:

npm init -y

npm install  node-gyp-build

mkdir nix
rm -fr node_module
node2nix -16 --development --input package.json --lock package-lock.json --node-env ./nix/node-env.nix --composition ./nix/default.nix  --output ./nix/node-package.nix
nix-build nix/default.nix

现在我的问题是如何在flke.nix中使用InOut In,以便有这个包的开发环境

我试过用那个薄片.nix

{
  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
    flake-utils.url = "github:numtide/flake-utils";
  };

  outputs = { self, nixpkgs, flake-utils, ... }:
    flake-utils.lib.eachDefaultSystem (system:
      let
        pkgs = import nixpkgs { inherit system; };
        npm_pack = import (./nix/default.nix);
      in with pkgs;{
        devShell = mkShell { buildInputs = [ npm_pack];};
        ]; };
      });
}

还有这个命令:

 nix develop --extra-experimental-features nix-command --extra-experimental-features flakes --ignore-environment

错误:依赖项不是有效类型:nix-shell的BuildInputs的元素%1

推荐答案

您的示例中的npm_packvar具有以下属性(许多被省略)

  • package-您正在构建的包的nix输出(如果它是一些可执行文件,则可以作为buildInput添加到您的devshell 中)
  • shell-a devShell,它为您提供运行您正在try 构建的包的NPM代表,这等同于您克隆包并运行NPM安装

因此,如果您只想将该包用于另一个项目,那么您的Flake将如下所示

 outputs = { self, nixpkgs, flake-utils, ... }:
    flake-utils.lib.eachDefaultSystem (system:
      let
        pkgs = import nixpkgs { inherit system; };
        npm_pack = import ./nix { inherit pkgs system;};
      in with pkgs;{
        devShell = mkShell { buildInputs = [ npm_pack.package ];};
      });

如果你想让它自动安装NPM dep,你可以使用shell ,这样薄片看起来就像

 outputs = { self, nixpkgs, flake-utils, ... }:
    flake-utils.lib.eachDefaultSystem (system:
      let
        pkgs = import nixpkgs { inherit system; };
        npm_pack = import ./nix { inherit pkgs system;};
      in with pkgs;{
        devShell = npm_pack.shell
      });

Node.js相关问答推荐

Windows上使用ES6+的OpenAPI规范的Express服务器不接受嵌套路由'

使用NodeJS在S3上传文件时的格式问题

当建议在第二代上运行云功能时,现在是否有新的Firestore AdminClient可供使用?

运行JEST测试时找不到模块&q;错误

node 上的磁盘压力

Stripe webhook无法访问Express请求原始正文

Mongoose更新许多不使用数组作为筛选器来更新记录

TS[2339]:类型 '() => Promise<(Document & Omit) | 上不存在属性空>'

遇到 - TypeError:try 使用 Express(Node.js) 从 JSON 文件访问数据时无法读取未定义的属性(读取帖子)

无法使用 node 预签名 url 从 React 将图像文件上传到 s3

ESLint:TypeError:this.libOptions.parse 不是函数

搜索MongoDB条目的正确方法是'_id';在 node 中

适用于 Windows 7 的 NodeJS

TypeError:winston.Logger 不是带有winston 和morgan 的构造函数

NODEJS 进程信息

如何在 node 中转义 shell 命令的字符串?

nodejs v10.3.0 的 gulp 任务问题:src\node_contextify.cc:629: Assertion `args[1]->IsString()' failed

遍历 NodeJS 中的一系列日期

如何判断 Node.js 中是否设置了环境变量?

Socket.IO 连接用户数