Сделать возврат, что каталог не распознается как внутренняя или внешняя команда в Windows

352
jcubic

У меня есть проект, который использует make, который обычно работает на GNU / Linux, и теперь я пытаюсь запустить его на Windows и получил ошибку (из git bash):

'.' is not recognized as an internal or external command, 

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

Я пробовал как версию MinGW, так и GNUW, и обе они возвращали одну и ту же ошибку, проект работал в последний раз, когда я запускал его на Windows около года назад.

Вот мой make-файл, который потерпел неудачу:

VERSION=1.16.1 SED=sed CD=cd NPM=npm CP=cp RM=rm CAT=cat DATE=`date -uR` GIT=git BRANCH=`git branch | grep '^*' | sed 's/* //'` ESLINT=node_modules/.bin/eslint UGLIFY=node_modules/.bin/uglifyjs JSONLINT=node_modules/.bin/jsonlint JEST=node_modules/.bin/jest CSSNANO=./node_modules/.bin/cssnano SPEC_CHECKSUM=`md5sum __tests__/terminalSpec.js | cut -d' ' -f 1` COMMIT=`git log -n 1 | grep commit | sed 's/commit //'` URL=`git config --get remote.origin.url` skip_re="[xfi]it\\(|[fdx]describe\\("  .PHONY: coverage test coveralls lint.src eslint skipped_tests jsonlint publish lint  ALL: Makefile .$(VERSION) terminal.jquery.json bower.json package.json js/jquery.terminal-$(VERSION).js js/jquery.terminal.js js/jquery.terminal-$(VERSION).min.js js/jquery.terminal.min.js css/jquery.terminal-$(VERSION).css css/jquery.terminal-$(VERSION).min.css css/jquery.terminal.min.css css/jquery.terminal.css README.md import.html js/terminal.widget.js www/Makefile  foo: echo `pwd`  bower.json: templates/bower.in .$(VERSION) $(SED) -e "s/{}/$(VERSION)/g" templates/bower.in > bower.json  package.json: templates/package.in .$(VERSION) $(SED) -e "s/{}/$(VERSION)/g" templates/package.in > package.json  js/jquery.terminal-$(VERSION).js: js/jquery.terminal-src.js .$(VERSION) $(GIT) branch | grep '* devel' > /dev/null && $(SED) -e "s/{}/DEV/g" -e "s/{}/$(DATE)/g" js/jquery.terminal-src.js > js/jquery.terminal-$(VERSION).js || $(SED) -e "s/{}/$(VERSION)/g" -e "s/{}/$(DATE)/g" js/jquery.terminal-src.js > js/jquery.terminal-$(VERSION).js  js/jquery.terminal.js: js/jquery.terminal-$(VERSION).js $(CP) js/jquery.terminal-$(VERSION).js js/jquery.terminal.js  js/jquery.terminal-$(VERSION).min.js: js/jquery.terminal-$(VERSION).js $(UGLIFY) -o js/jquery.terminal-$(VERSION).min.js --comments --mangle -- js/jquery.terminal-$(VERSION).js  js/jquery.terminal.min.js: js/jquery.terminal-$(VERSION).min.js $(CP) js/jquery.terminal-$(VERSION).min.js js/jquery.terminal.min.js  css/jquery.terminal-$(VERSION).css: css/jquery.terminal-src.css .$(VERSION) $(GIT) branch | grep '* devel' > /dev/null && $(SED) -e "s/{}/DEV/g" -e "s/{}/$(DATE)/g" css/jquery.terminal-src.css > css/jquery.terminal-$(VERSION).css || $(SED) -e "s/{}/$(VERSION)/g" -e "s/{}/$(DATE)/g" css/jquery.terminal-src.css > css/jquery.terminal-$(VERSION).css  css/jquery.terminal.css: css/jquery.terminal-$(VERSION).css .$(VERSION) $(CP) css/jquery.terminal-$(VERSION).css css/jquery.terminal.css  css/jquery.terminal.min.css: css/jquery.terminal-$(VERSION).min.css $(CP) css/jquery.terminal-$(VERSION).min.css css/jquery.terminal.min.css  css/jquery.terminal-$(VERSION).min.css: css/jquery.terminal-$(VERSION).css $(CSSNANO) css/jquery.terminal-$(VERSION).css css/jquery.terminal-$(VERSION).min.css --no-discardUnused --safe  README.md: templates/README.in .$(VERSION) $(GIT) branch | grep '* devel' > /dev/null && $(SED) -e "s/{}/DEV/g" -e \ "s/{}/$(BRANCH)/g" -e "s/{}/$(SPEC_CHECKSUM)/" \ -e "s/{}/$(COMMIT)/g" < templates/README.in > README.md || $(SED) -e \ "s/{}/$(VERSION)/g" -e "s/{}/$(BRANCH)/g" -e \ "s/{}/$(SPEC_CHECKSUM)/" -e "s/{}/$(COMMIT)/g" < templates/README.in > README.md  .$(VERSION): Makefile touch .$(VERSION)  Makefile: templates/Makefile.in $(SED) -e "s/{}/"$(VERSION)"/" templates/Makefile.in > Makefile  import.html: templates/import.in $(SED) -e "s/{}/$(BRANCH)/g" templates/import.in > import.html  js/terminal.widget.js: js/terminal.widget.in $(GIT) branch | grep '* devel' > /dev/null || $(SED) -e "s/{}/$(VERSION)/g" js/terminal.widget.in > js/terminal.widget.js  terminal.jquery.json: manifest .$(VERSION) $(SED) -e "s/{}/$(VERSION)/g" manifest > terminal.jquery.json  www/Makefile: $(wildcard www/Makefile.in) Makefile .$(VERSION) @test "$(BRANCH)" = "master" -a -d www && $(SED) -e "s/{}/$(VERSION)/g" www/Makefile.in > www/Makefile || true  test: $(JEST) --coverage --collectCoverageFrom=js/.js  coveralls: $(CAT) ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js  lint.src: $(ESLINT) js/jquery.terminal-src.js  eslint: $(ESLINT) js/jquery.terminal-src.js $(ESLINT) js/dterm.js $(ESLINT) js/xml_formatting.js $(ESLINT) js/unix_formatting.js $(ESLINT) js/prims.js $(ESLINT) js/less.js  skipped_tests: @! grep -E $(skip_re) __tests__/terminalSpec.js  jsonlint: package.json bower.json $(JSONLINT) package.json > /dev/null $(JSONLINT) bower.json > /dev/null  publish: $(GIT) clone $(URL) --depth 1 npm $(CD) npm && $(NPM) publish $(RM) -rf npm  lint: eslint jsonlint 

make foo вернет правильный каталог.

проблема в этом правиле:

UGLIFY=./node_modules/.bin/uglifyjs  js/jquery.terminal-$(VERSION).min.js: js/jquery.terminal-$(VERSION).js $(UGLIFY) -o js/jquery.terminal-$(VERSION).min.js --comments --mangle -- js/jquery.terminal-$(VERSION).js 

но когда я запустил команду из того же каталога в gitbash, она была выполнена успешно, я также попытался запустить экспорт PATH =.: $ PATH перед запуском make и получил ту же ошибку.

Я также пытался изменить окончание строки Makefile с Unix на Windows, но это также не решило проблему.

0

1 ответ на вопрос

0
jcubic

Проблема была в косой черте против обратной косой черты. Поэтому решение состоит в том, чтобы использовать разные пути для Windows и Linux:

ifdef SYSTEMROOT UGLIFY=.\node_modules\.bin\uglifyjs JSONLINT=.\node_modules\.bin\jsonlint JEST=.\node_modules\.bin\jest CSSNANO=.\node_modules\.bin\cssnano ESLINT=.\node_modules\.bin\eslint else UGLIFY=./node_modules/.bin/uglifyjs JSONLINT=./node_modules/.bin/jsonlint JEST=./node_modules/.bin/jest CSSNANO=./node_modules/.bin/cssnano ESLINT=./node_modules/.bin/eslint endif