【问题标题】:How to exclude the folder but include all of its files and sub-folder while npm publish in angular librarynpm 在角度库中发布时如何排除文件夹但包含其所有文件和子文件夹
【发布时间】:2020-08-20 03:54:05
【问题描述】:

当我构建我的 Angular 库应用程序时,我会在文件夹 dist/ 中获得工件。这意味着当库被导入另一个应用程序时,它是这样完成的:

import { XXX } from 'libname/dist'

但是,我希望 import 语句没有 dist 文件夹。我无法更改运行 npm publish 命令的目录,因此需要使用 .npmignore 或 package.json(文件或主)属性的解决方案(如果可能)。

这可能吗?同样的问题发布在这里enter link description here,但我不确定如何使用 npmignore、文件和主要属性删除 dist 文件夹并在包中保留文件/子文件夹。

【问题讨论】:

    标签: node.js angular npm


    【解决方案1】:

    您的库必须在angular.json 下的architect > options > project 中有此配置:

    "my-library": {
      "projectType": "library",
     ...
      "architect": {
        "build": {
          "builder": "@angular-devkit/build-ng-packagr:build",
          "options": {
     ...
            "project": "projects/my-library/ng-package.json"
          },
     ...
    

    而且你的 ng-package.json 文件必须是:

    {
      "$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
      "dest": "../../dist/my-library",
      "lib": {
        "entryFile": "src/public-api.ts",
        "umdModuleIds": {
        }
      }
    }
    

    您还必须有一个public-api.ts 文件:

    // public-api.ts
    /*
     * Public API Surface of my-library
     */
    
    export * from './lib/my-library.module';
    ...
    

    你有所有这些文件和配置吗?

    这些都是在您创建库时应该自动进行的配置。 供参考,您可以观看: https://angular.io/guide/creating-libraries

    更新:

    “目前我正在将我的 package.json 复制到 dist 文件夹中,然后在 dist 文件夹中运行 npm pack。”

    使用 gulp 批处理,您可以将 package.json 从根目录复制到 dist:

    // /gulpfile.js 
    var gulp = require('gulp');
    
    gulp.task('default', [], function() {
      gulp.src(['../../my-library/package.json']) // pay attenction to your relative path where you run gulp.
          .pipe(gulp.dest('my-library/dist'));
    });
    

    运行它:

    gulp default
    

    在 gulp 文件目录中。

    然后尝试在 dist 文件夹中使用npm pack

    【讨论】:

    • 文件都在那里。因此,一旦构建运行,所有文件都会生成到 dist 文件夹中。我有一个带有 project.json 文件的父项目,这是运行 npm pack 的地方。我将库中生成的 dist 文件夹作为 dist/** 复制到根路径,但是当 npm run pack 启动时,它也需要 dist 文件夹,这也是我想要排除的。
    • 尝试使用 gulp 解决方案。我修改了答案以包含一个 gulp 任务的示例。
    • 正如我之前所说,这是通过 CI Jenkins 文件运行的,我无法更改位置,即 cd dist 来运行 npm 包。我可以更改父级 package.json 文件或添加 npmignore 文件
    猜你喜欢
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    • 2021-06-28
    • 2012-07-24
    • 2019-11-25
    • 2013-05-01
    相关资源
    最近更新 更多