将文件从目录拉取到 NPM 的根文件夹中

2024-01-08

我正在向 NPM 发布一个库。

当我构建库时,生成的工件被放置在dist文件夹位于我的项目的根目录中index.js.

当用户从 NPM 安装时我想index.js出现在root在他们创建的文件夹中node_modules文件夹。目前,它保留在名为的目录中dist.

我怎样才能做到这一点?

我的packages.json:

{
  "name": "my-package",
  "version": "0.0.9",
  "files": ["dist/*"],
  "main": "index.min.js",
  "private": false,
  "dependencies": {},
  "devDependencies": {},
  "repository": "[email protected] /cdn-cgi/l/email-protection:username/my-package.git"
}

我有完全相同的问题。

我不是通过向上复制文件来解决这个问题,而是通过将我需要的文件向下复制到./dist/文件夹,然后执行npm publish从那里;然后,NPM 将该文件夹视为一个完整的包,一切都运行良好。我需要从根文件夹复制的唯一文件是:

  • package.json
  • README.md

因为我们要将这些文件复制到./dist/在我们发布之前的文件夹中,我们不希望package.json参考文件./dist/。所以删除package.json's files完全输入,因为我们不需要告诉它我们将获取哪些文件 - 我们将获取其中的所有内容./dist/文件夹。我正在使用 TypeScript,所以我也有一个typings条目,并且再次没有提及./dist/.

{
  "name": "my-package",
  "version": "0.0.9",
  "main": "index.min.js",
  "typings": "index.d.ts",
  "private": false,
  "dependencies": {},
  "devDependencies": {},
  "repository": "[email protected] /cdn-cgi/l/email-protection:username/my-package.git"
}

现在进行发布步骤。我构建了一个 gulp 任务,它将为我执行发布,使其变得漂亮且自动化(除了增加包版本 # 之外)。

从 gulp 中,我将使用 Node 的 spawn() 来启动 npm 进程。然而,因为我实际上是在 Windows 上工作,所以我使用了“交叉生成 https://www.npmjs.com/package/cross-spawn“而不是普通的内置 Node.js 生成(当我的路径中有空格时,我通过艰难的方式了解到它不起作用!)。

这是我的 gulp 文件,删除了 TypeScript 位:

var gulp = require('gulp');
var del = require('del');
var spawn =  require('cross-spawn'); // WAS: require('child_process').spawn;

var config = {
    src: { tsFiles: './src/**/*.ts' },
    out: { path: './dist/' }
}

gulp.task('clean', () => {
    return del('dist/*');
});


gulp.task('build', ['clean'], () => {
    ....
});


gulp.task('publish', ['build'], (done) => {
    // Copy the files we'll need to publish
    // We just use built-in gulp commands to do the copy
    gulp.src(['package.json', 'README.md']).pipe(gulp.dest(config.out.path));

    // We'll start the npm process in the dist directory
    var outPath = config.out.path.replace(/(\.)|(\/)/gm,'');
    var distDir = __dirname + '\\' + outPath + '\\';
    console.log("dist directory = " + distDir);

    // Start the npm process
    spawn('npm', ['publish'], { stdio:'inherit', cwd:distDir } )
        .on('close', done)
        .on('error', function(error) {
            console.error('  Underlying spawn error: ' + error);
            throw error;
        });
});

请注意,当我们调用 spawn() 时,我们传递了第三个参数,即选项。这里的主要条目是cwd:distDir,它告诉spawn从./dist/目录运行npm进程。因为使用spawn可能会导致问题,所以我已经加入spawn错误处理。当我对我的使用进行故障排除时spawn()我发现了以下内容堆栈溢出 https://stackoverflow.com/questions/27688804/how-do-i-debug-error-spawn-enoent-on-node-js文章非常有帮助。

这就像一种魅力。我发布的包包含根目录中的所有文件和./dist/文件夹未发布。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将文件从目录拉取到 NPM 的根文件夹中 的相关文章

随机推荐