Скрипт постбулирования npm выдает ошибку при переименовании файла - PullRequest
0 голосов
/ 30 июня 2018

Я создал скрипт узла для постпроизводства npm, который выполняет простую задачу по переименованию файла в папке сборки после того, как сборка сгенерирована в приложении реагирования.

вот файл postbuild.js

let fs = require("fs");
let path = require("path");

const oldJSPath = path.join(__dirname, "build", "static", "js", "*.js");
const newJSPath = path.join(__dirname, "build", "static", "js", "bundle.js");

const oldCSSPath = path.join(__dirname, "build", "static", "css", "*.css");
const newCSSPath = path.join(__dirname, "build", "static", "css", "bundle.css");

fs.renameSync(oldJSPath, newJSPath);
fs.renameSync(oldCSSPath, newCSSPath);

Теперь проблема в том, что я получаю сообщение об ошибке:

ENOENT: no such file or directory, rename C:\Users\HDL\Documents\demo-redux-app\build\static\js\*.js' -> 'C:\Users\HDL\Documents\demo-redux-app\build\static\js\bundle.js

Хотя файл и каталог существуют в каталоге сборки

структура build dir:

-build
  -static
    -css
      *.css
    -js
      *.js

    -media
      *.png, jpg etc

Не знаю, если это важно, но вот это package.json:

{
  "name": "demo-redux-app",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "react": "^16.4.1",
    "react-dom": "^16.4.1",
    "react-redux": "^5.0.7",
    "react-scripts": "1.1.4",
    "redux": "^4.0.0",
    "redux-promise-middleware": "^5.1.1",
    "redux-thunk": "^2.3.0"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "postbuild": "node postbuild.js",
    "test": "react-scripts test --env=jsdom",
    "eject": "react-scripts eject"
  }
}

1 Ответ

0 голосов
/ 01 июля 2018

Node.js fs не поддерживает подстановочные знаки.

Если вы хотите сопоставить первый файл среди *.js и переименовать его в bundle.js, это можно сделать с помощью глобусов:

const globby = require('globby');

const newJSPath = path.join(__dirname, "build", "static", "js", "bundle.js");
const oldJSWildcardPath = path.join(__dirname, "build", "static", "js", "*.js");
const [oldJSPath] = globby.sync(oldJSWildcardPath);
if (oldJSPath) {
  fs.renameSync(oldJSPath, newJSPath);
}
...

Или с регулярными выражениями:

const newJSPath = path.join(__dirname, "build", "static", "js", "bundle.js");
const oldJSDirPath = path.join(__dirname, "build", "static", "js");
const [oldJSPath] = fs.readdirSync(oldJSDirPath).filter(filename => /.js$/.test(filename));
if (oldJSPath) {
  fs.renameSync(oldJSPath, newJSPath);
}
...
...