Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Gruntfile.js в произвольной директории (https://javascript.ru/forum/node-js-io-js/63577-gruntfile-js-v-proizvolnojj-direktorii.html)

bes 15.06.2016 22:58

Gruntfile.js в произвольной директории
 
начато здесь

Задача:
на примере склейки двух файлов заюзать grunt под виндой портативно с относительно произвольным расположением файла Gruntfile.js

вариант структуры каталогов:
test_project
- dist
--  test.js появится здесь
- src
--  test1.js
--  test2.js
- сtr
--  grunt
---      env
----        nodejs
-----          node_modules
-----          node.exe
-----          npm.cmd
---      node_modules
----        .bin
-----          grunt.cmd
----        grunt
----        grunt-cli
----        grunt-contrib-concat
---      Gruntfile.js
---      package.json


package.json:
{
  "name": "test_project",
  "version": "0.1.0",
  "devDependencies": {
    "grunt": "^1.0.1",
    "grunt-cli": "^1.2.0",
    "grunt-contrib-concat": "^1.0.1"
  }
}


Grunfile.js:
module.exports = function (grunt) {
	grunt.initConfig({
		concat: {
			test_target: {
			//пути отсчитываем от расположения Gruntfile.js
			  src: ['../../src/test1.js', '../../src/test2.js'],
			  dest: '../../dist/test.js',
			},
		},
	});
	grunt.loadNpmTasks("grunt-contrib-concat");
	grunt.registerTask("default", ["concat"]);
};


вариант решения:
- каталог с node.exe в path
test_project\ctr\grunt>set path=%cd%;%path%

- в Grunfile.js пути отсчитываем от его расположения

- чтобы запускать grunt.cmd не только из каталога .bin, добавляем путь к нему в path
test_project\ctr\grunt\node_modules\.bin>set path=%cd%;%path%


итого:
test_project\ctr\grunt>grunt

nerv_ 16.06.2016 11:45

bes, ничего не имею против Grunt, но gulp реальнее удобней. Например, ту же конкатенацию можно сделать так (без подключения плагинов):
gulp
  .src([
    'path_1',
    'path_2'
  ])
  .pipe(gulp.dest('path/all.js'));


Вместе с тем следует сделать важное замечание: когда мы работаем с js кодом (модулями), мы должны оперировать понятием модуля, а не "склеить два файла". Т.е. правильный путь решения данной задачи Webpack или подобные инструменты.

bes 16.06.2016 21:32

Цитата:

Сообщение от nerv_
Вместе с тем следует сделать важное замечание: когда мы работаем с js кодом (модулями), мы должны оперировать понятием модуля, а не "склеить два файла". Т.е. правильный путь решения данной задачи Webpack или подобные инструменты.

другие типы файлов можно склеивать? :)

destus 17.06.2016 05:00

bes,
через rigger можно.

bes 17.06.2016 23:14

Цитата:

Сообщение от destus
bes,
через rigger можно.

а можно через
copy test1.js+test2.js test.js /b /y

или
type test1.js test2.js > test.js

и ещё кучкой способов, задача как бы не в этом была :)

destus 18.06.2016 06:46

bes,
Это про склейку других типов файлов было.:)

По поводу первого сообщения. То есть папку с каждым проектом надо будет записывать в NODE_PATH ? test_project\ctr\grunt ... Set path

bes 18.06.2016 09:58

Цитата:

Сообщение от destus
bes,
Это про склейку других типов файлов было.

у grunt-contrib-concat вроде и так нет ограничений на тип склеиваемых файлов, в общем забудем о склейке :)

Цитата:

Сообщение от destus
По поводу первого сообщения. То есть папку с каждым проектом надо будет записывать в NODE_PATH ? test_project\ctr\grunt ... Set path

в приведённом мною способе можно просто вызывать grunt.cmd из его каталога ctr\grunt\node_modules\.bin, файл ctr\grunt\Gruntfile.js при этом будет найден
можно также делать вызов так
test_project\ctr\grunt>"node_modules/.bin/grunt"

добавив в переменную окружения path (не node_path) каталог ctr\grunt\node_modules\.bin можно будет сделать два дополнительных работоспособных вызова grunt.cmd по короткому имени: из каталогов ctr\grunt\node_modules\ и ctr\grunt\

destus 18.06.2016 10:34

bes,
Ок :)а чем вариант, когда gruntfile лежит на уровень выше чем src не устраивает?

Цитата:

...
src
----js
--------test1.js
--------test2.js
node_modules
gruntfile.js
...

bes 18.06.2016 12:04

Цитата:

Сообщение от destus
bes,
Ок а чем вариант, когда gruntfile лежит на уровень выше чем src не устраивает?

http://javascript.ru/forum/419064-post1884.html
Цитата:

Сообщение от bes
сама мысль заюзать grunt из дополнительного каталога ctr (каталога для сборщиков) возникла на основе таких мыслей:
- есть отдельная сущность - сборщик, поэтому надо выделить ей отдельный каталог, внутри этого каталога для каждого сборщика выделить по отдельному каталогу
сборщик использует файлы в каталоге src, чтобы сформировать содержимое каталога dist
- довольно убого и нелогично выглядит, когда все конфиги, build-файлы и т.п. лежат в куче среди собственно исходных файлов или рядом с ними, и, чем больше таких файлов, тем более убого всё это выглядит
например, в случае с grunt
это могло бы выглядеть так
project_root
- dist
- src
--  test1.js
--  test2.js
- node_modules
- Gruntfile.js
- package.json

ещё хуже так, так как дополнительные файлы и каталоги не относятся к исходникам, для которых выделен отдельный каталог src
project_root
- dist
- src
--  test1.js
--  test2.js
--  node_modules
--  Gruntfile.js
-- package.json



nerv_ 18.06.2016 22:33

Цитата:

Сообщение от bes
другие типы файлов можно склеивать?

можно импортировать модули практически любых типов:
- js
- css
- json
- images
- svg
- fonts
- ...
Для этого в вебпаке создана концепция лоадеров

Интересные вещи начинаются тогда, когда, например, модуль экспортирует сразу несколько типов файлов, а ты импортишь все это как единый модуль. Пример chosen для jquery
import 'chosen'; // js, css, images

:)


Часовой пояс GMT +3, время: 09:18.