首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安装本地模块时忽略.npmignore

安装本地模块时忽略.npmignore
EN

Stack Overflow用户
提问于 2018-02-01 10:37:04
回答 3查看 2.4K关注 0票数 12

我们所有的服务器项目都包含一个git子模块文件夹(假设是modules),其中包含我们的自定义模块/组件。

这种模块依赖项是在本地安装的(请参阅serverApp/package.json),这样我们就不必将整个子模块文件夹包含到最终的rpm。我遇到的问题是限制node_modules中包含的文件数量。

子模块结构如下所示:

代码语言:javascript
复制
modules
|--loader
   |--dist => compiled js files here that are created when installing the module
   |--ts => contains typescript files that shouldn't be included in node_modules
   |--package.json
   |--tsconfig.json
|--more modules
|--.gitignore

.npmignore中添加一个modules/loader文件似乎没有帮助,因为整个文件夹都是复制的。

modules/loader/tsconfig.json

代码语言:javascript
复制
{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs",
    "declaration": true,
    "outDir": "./dist",
    "strict": true
  }
}

modules/loader/package.json

代码语言:javascript
复制
{
  "name": "loader",
  "version": "1.2.0",
  "private": true,
  "description": "",
  "main": "dist/index.js",
  "types": "dist/index.d.ts",
  "scripts": {
    "preinstall": "npm run build",
    "build": "../../node_modules/typescript/bin/tsc",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "dependencies": {
    "@types/lodash": "^3.9.3",
    "@types/nomnom": "0.0.28",
    "@types/yamljs": "^0.2.30",
    "lodash": "^3.9.3",
    "nomnom": "^1.8.1",
    "yamljs": "^0.2.1"
  },
  "devDependencies": {
    "typescript": "~2.3.4"
  }
}

serverApp/package.json

代码语言:javascript
复制
{
  "name": "my-server-app",
  "version": "2.3.0",
  "description": "",
  "main": "myServerApp.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "license": "private",
  "dependencies": {
    "loader": "file:modules/loader"
  },
  "devDependencies": {
    "grunt": "^0.4.5",
    "grunt-cli": "^0.1.13"
  }
}

我不确定这是否与我们有一个文件这一事实有关,还是因为该模块没有在本地发布和安装。

npm版本=> 5.3.0

编辑

也不适合在"files"中指定modules/loader/package.json

EN

回答 3

Stack Overflow用户

发布于 2018-05-10 06:43:38

在检查完这个问题之后,我发现了以下需要提及的有用点:

我们使用.npmignore文件将东西从包中删除。如果没有.npmignore文件,但是有 .gitignore 文件,那么npm将忽略.gitignore文件匹配的内容。

如果希望包含被.gitignore文件排除的内容,则可以创建一个空的.npmignore文件来覆盖该文件。与git一样,npm在包的所有子目录(而不仅仅是根目录)中查找.npmignore.gitignore文件。

类似于.gitignore文件,.npmignore也遵循以下规则

#开始的空行或行将被忽略&标准glob模式可以工作。 可以使用正斜杠/结束模式以指定目录。 你可以用感叹号!.来否定一个模式 默认情况下,将忽略以下路径和文件,因此不需要显式地将它们添加到.npmignore

此外,除了捆绑依赖之外,node_modules中的所有内容都会被忽略。npm会自动为您处理这个问题,所以不要费心地将node_modules添加到.npmignore中。

测试您的.npmignore或文件配置是否工作

如果您希望再次检查您的包在发布时只包含您想要的文件,您可以在本地运行npm命令,这将在工作目录中生成一个tarball,就像它用于发布的方式一样。

您也可以在这里查看同样的问题,#14872,谢谢。

票数 1
EN

Stack Overflow用户

发布于 2018-05-10 06:05:10

你跟node 0.6.13 / npm 1.1.9查过了吗?这个问题在npm 1.1.4中很常见。看看这个链接

票数 0
EN

Stack Overflow用户

发布于 2018-05-10 06:44:35

您提到,您不想将“整个子模块”包含在“最终的rpm”中,我认为您最终将准备的包。我复制了类似的设置,并添加了一个'.npmignore‘来忽略我使用npm install --save ./task_in安装的“子模块”,其中'task_in’是我的模块保持在主包的(‘任务’) 'package.json‘。

当最后一个包是在“任务”文件夹中使用npm pack准备时,我得到了一个包(一个tar文件),它没有文件夹(‘task_in’),如‘..npmignore’中所示。

但是,在工作时,我发现模块'task_in‘文件夹被复制到'node_modules’,它自动不包含在最后的包中(参见这里)。而且,当包准备好时,".gitignore“被".npmignore”覆盖。

所以,这是我的“两分钱”,希望它能帮到你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48560683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档