跨环境找不到模块“..”

lej*_*bah 4 node.js gulp

我正在使用 gulp 复制创建的构建包:

gulp.task('fill-deploy-target', ['init-deploy-target'], () =>
gulp.src(['server*/**/*', 'node_modules*/**/*', 'package.json', 'package-lock.json',
    'ecosystem.config.js', 'gulpfile.js', '.sequelizerc'], { dot: true })
    .pipe(gulp.dest(`${deployTargetDir}/app_install/app/package`)));
Run Code Online (Sandbox Code Playgroud)

在 node_modules 中有一个文件夹 .bin 导致了问题。.bin 文件夹中的所有文件都被复制,但是当我尝试运行 build cross-env 时,出现了此错误。当我将 .bin 文件夹手动复制到服务器时,没有错误认为它是具有相同文件的同一文件夹。可能是什么问题呢?

use*_*087 8

我没有使用 gulp,但我的猜测是 gulp 不支持(软)符号链接。

在我的 .bin 文件夹中,所有文件都是到 node_modules 文件夹的符号链接: 在此输入图像描述

但是,当我只是复制文件夹时(例如使用 filezilla,或者在您的情况下使用 gulp),我会看到以下内容(ls -al):

在此输入图像描述

当您检查该cross-env文件时,您可以看到它需要 ('..') 文件,该文件在符号链接的情况下有效,但如果它只是复制文件,则会失败。

$ cat cross-env

#!/usr/bin/env node
'use strict';

var crossEnv = require('..');

crossEnv(process.argv.slice(2));
Run Code Online (Sandbox Code Playgroud)

因此,解决方案是复制带有符号链接的 .bin 文件或使用绝对路径运行 cross-env,如下所示:

  "scripts": {
    "start": "npm run production",
    "prod": "npm run production",
    "production": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=production node your-app.js",
    "dev": "npm run development",
    "development": "node node_modules/cross-env/dist/bin/cross-env.js NODE_ENV=development node your-app.js"
  },
Run Code Online (Sandbox Code Playgroud)