Задать вопрос
@Waldemar1010

Почему выдает ошибку undefined?

Всем доброго времени суток, столкнулся с проблемой при написании сборки на gulp.js, пишу сборку не в одном файле, а модульно поэтому возникла проблема при разрешении путей либо не правильно экспортирую/импортирую объекты, хотел бы узнанть почему когда в консоль пишу paths то выводит сам объект и вложенные в него объекты. а когда пытаюсь достучаться до вложенного объекта выдает undefined. Структура проекта такая
5ef8b30e8ee5d662088100.png

То есть если вывожу объект paths то видно что в нем лежат вложенные объекты
5ef8b85bbf34b949892675.png

Но если пытаюсь получить paths.styles.src либо просто paths.src то выдает undefined of src

5ef8b4fa524f0590032961.png

Код таска Styles.js

const {dest, src} = require('../node_modules/gulp');

const {preprocessor} = require('./helpers/VariableHelper');
const paths = require('./helpers/PathsHelper');

const sass         = require('gulp-sass');
const scss         = require('gulp-sass');
const less         = require('gulp-less');
const stylus       = require('gulp-stylus');
const cleancss     = require('gulp-clean-css');
const concat       = require('gulp-concat');
const browserSync  = require('browser-sync').create();
const autoprefixer = require('gulp-autoprefixer');
			  
console.log(paths.src);

function styles() {
	return src(paths.styles.src)
	.pipe(sass())
	.pipe(autoprefixer({ overrideBrowserslist: ['last 10 versions'], grid: true }))
	.pipe(cleancss( {level: { 1: { specialComments: 0 } },/* format: 'beautify' */ }))
	.pipe(dest('./dist'))
	.pipe(browserSync.stream())
}

exports.styles = styles;


Код VariableHelper.js

const path = require('path');
let baseDir  = path.resolve('./src') // If you wanna change you main dev directory, just replace src on another name
preprocessor = 'sass', // If you work with less or scss, just change 'sass' on 'less' for example.
fileswatch   = 'html,htm,txt,json,md,woff2', // List of files extensions for watching & hard reload (comma separated)
imageswatch  = 'jpg,jpeg,png,webp,svg'; // List of images extensions for watching & compression (comma separated)

exports.baseDir      = baseDir;
exports.preprocessor = preprocessor;
exports.fileswatch   = fileswatch;
exports.imageswatch  = imageswatch;


Код PathsHelper.js

let {baseDir, preprocessor} = require('./VariableHelper.js');

let paths = {

	scripts: {
		src: [
			// 'node_modules/jquery/dist/jquery.min.js', // npm vendor example (npm i --save-dev jquery)
			baseDir + '/js/app.js' // app.js. Always at the end
		],
		dest: baseDir + '/js',
	},

	styles: {
		src:  baseDir + '/' + preprocessor + '/test.sass', // ./src/sass/test.*
		dest: baseDir + '/css',
	},

	images: {
		src:  baseDir + '/images/src/**/*',
		dest: baseDir + '/images/dest',
	},

	deploy: {
		hostname:    'username@yousite.com', // Deploy hostname
		destination: 'yousite/public_html/', // Deploy destination
		include:     [/* '*.htaccess' */], // Included files to deploy
		exclude:     [ '**/Thumbs.db', '**/*.DS_Store' ], // Excluded files from deploy
	},

	cssOutputName: 'app.min.css',
	jsOutputName:  'app.min.js',

}

console.log(paths.styles.src);

exports.paths = paths;


Если в таске пишу return src хардкодом то все работает.

function styles() {
	return src('.src/sass/test.sass')
	.pipe(sass())
	.pipe(autoprefixer({ overrideBrowserslist: ['last 10 versions'], grid: true }))
	.pipe(cleancss( {level: { 1: { specialComments: 0 } },/* format: 'beautify' */ }))
	.pipe(dest('./dist'))
	.pipe(browserSync.stream())
}


Подскажите пожалуйста почему не может прочитать значение с paths.src и как пофиксить чтобы заработало? Уже два часа пытаюсь понять что не так написал уже и path.resolve подключил и через path.dirname пробовал ничего не выходит, из догадок только то что как-то не так экспортирую сам объект...
  • Вопрос задан
  • 211 просмотров
Подписаться 2 Простой 15 комментариев
Решения вопроса 1
smilingcheater
@smilingcheater
1. у вас в выложенном на гитхаб проекте не прописаны нужные зависимости в package.json - gulp-clean-css, gulp-concat, gulp-less, gulp-stylus
2. Путь в файлу test.sass в path.styles.src формируется криво - получается что-то типа
C:/Users/koles/Desktop/gulp-switzerland/src/sass/test.sass/sass/test.sass - 2 раза кусок sass/test.sass в конце
3. а зачем вообще хардкодить полный путь? Это же не будет работать нигде , кроме вашего компа?
4. Даже после этих исправлений всё равно выведется ошибка
Error: File not found with singular glob: C:/Users/koles/Desktop/gulp-switzerland/src/sass/test.sass (if this was purposeful, use `allowEmpty` option)
Внимательно её прочитайте.
И исправьте.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы