Dosyaları içe aktarma yoluyla bağlama çalışmıyor

0

Soru

Bir gün boyunca, gulp için babel'in neden benim için çalışmadığını ya da modülleri yanlış bağladığımı anlayamıyorum ...
Tarayıcıdaki hata şu şekildedir:

Uncaught ReferenceError: require is not defined
  at main.min.js:1

Modülleri şu şekilde bağlarım:

import focusVisible from "focus-visible";

Ana kod.dk.js dosyası:

"use strict";var e;(e=require("focus-visible"))&&e.__esModule;

Gulp görevi:

const { src, dest, series, watch, parallel } = require('gulp'),
      fileinclude = require('gulp-file-include'),
      rename = require("gulp-rename"),
      uglify = require('gulp-uglify-es').default,
      babel = require("gulp-babel"),
      notify = require("gulp-notify"),
      browserSync = require("browser-sync").create()

const changingScripts = () => {
  return src(['src/js/main.js', 'src/js/pages/**/*.js'])
    .pipe(babel())
    .pipe(fileinclude())
    .pipe(dest('dist/js'))
    .pipe(uglify({
      toplevel: true
    }).on('error', notify.onError()))
    .pipe(rename({
      extname: '.min.js'
    }))
    .pipe(dest('dist/js'))
    .pipe(browserSync.stream())
}

Paket.json dosyası şöyle:

{
  "name": "project_name",
  "version": "1.0.0",
  "description": "some description of the project",
  "scripts": {},
  "keywords": ["keyword_1", "keyword_2", "keyword_3"],
  "author": "project_author",
  "license": "ISC",
  "devDependencies": {
    "@babel/core": "^7.16.0",
    "@babel/eslint-parser": "^7.16.3",
    "@babel/preset-env": "^7.16.4",
    "@babel/register": "^7.16.0",
    "browser-sync": "^2.27.7",
    "eslint": "^8.2.0",
    "eslint-config-airbnb-base": "^15.0.0",
    "eslint-plugin-import": "^2.25.3",
    "gulp": "^4.0.2",
    "gulp-babel": "^8.0.0",
    "gulp-file-include": "^2.3.0",
    "gulp-notify": "^4.0.0",
    "gulp-rename": "^2.0.0",
    "gulp-uglify-es": "^3.0.0"
  }
}

Bu.babelrc dosyası şöyle görünür:

{
  "presets": ["@babel/preset-env"]
}

Her şey gerekli olanı uygulamış gibi görünüyor.
Yardım edersen minnettar olurum.
Bu hata nedeniyle tüm proje sıkıştı ...
Kullanmadan sorunu çözmek için tavsiye edilir Webpack :)

gulp gulp-babel javascript node.js
2021-11-20 06:47:49
1

En iyi cevabı

1

Kodunuzu tarayıcı uyumlu olacak şekilde dönüştürdüğünüz bir oluşturma adımını kaçırıyor olabilirsiniz. Bu require yöntem tarayıcıda kullanılamaz.

Kodunuzu tarayıcıda çalıştırılabilmesi için dönüştüren bir araç kullanmanız gerekir. Böyle bir araç Browserify, diğeri rollup ve daha fazlası olabilir. Bu araçlar, genel olarak konuşursak, bağımlılık kaynaklarını uygulama kodunuzla birlikte paketleyerek require ifadelerinin tarayıcının anladığı başka bir kalıba dönüştürülmesini sağlar.

Bunu şöyle düşünebilirsiniz (örnek basitleştirilmiştir):

Sizin tarafınızdan yazılan kod

// main.js
const stringify = require('stringify')

alert(stringify({ error: "No authorization" })

Node_modules'da bağımlılık kaynağı

// node_modules/stringify/index.js
function stringify(obj) {
  return JSON.stringify(obj);
}

expost.default = stringify

Paket sonucu

// dist/main.js
function stringify(obj) {
  return JSON.stringify(obj);
}

alert(stringify({ error: "No authorization" })

Gulp, browserify için depolarında resmi bir kullanım örneği barındırıyor:

'use strict';

var browserify = require('browserify');
var gulp = require('gulp');
var source = require('vinyl-source-stream');
var buffer = require('vinyl-buffer');
var log = require('gulplog');
var uglify = require('gulp-uglify');
var reactify = require('reactify');

gulp.task('javascript', function () {
  // set up the browserify instance on a task basis
  var b = browserify({
    entries: './entry.js',
    debug: true,
    // defining transforms here will avoid crashing your stream
    transform: [reactify]
  });

  return b.bundle()
    .pipe(source('app.js', { sourcemaps: true }))
    .pipe(buffer())
        // Add transformation tasks to the pipeline here.
        .pipe(uglify())
        .on('error', log.error)
    .pipe(gulp.dest('./dist/js/', { sourcemaps: '../sourcemaps/' }));
});

Gulp Sürüm kontrolü: Browserify + Dönüşümleri

Sizin için bir örnek oluşturmaya çalıştım, ancak projeniz için en kullanışlı gulp betiğinin ne olacağını söylemek zor. Bir örnek ekleyeceğim, ancak lütfen bunu genel kullanıma hazır bir düzeltme olarak düşünmeyin. Mevcut gulp senaryonuzun sahip olduğu davranışı taklit etmeye çalışır. Örneğin, uzun vadede başka davranışlar isteyebilirsiniz, çünkü bu komut dosyasının oluşturduğu paket, diğer yapılandırmaların veya takımların izin vereceği kadar optimize edilmemiş olabilir.

const { dest } = require("gulp"),
  browserify = require("browserify"),
  babelify = require("babelify"),
  glob = require("glob"),
  source = require("vinyl-source-stream"),
  fileinclude = require("gulp-file-include"),
  rename = require("gulp-rename"),
  uglify = require("gulp-uglify-es").default,
  notify = require("gulp-notify"),
  browserSync = require("browser-sync").create(),
  es = require("event-stream");

const changingScripts = (done) => {
  // Define files you want to have as inputs
  var files = ["src/js/main.js", ...glob.sync("src/js/pages/**/*.js")];
  // Bundle each file separately so that file structure is preserved in
  // dist
  var tasks = files.map((file) => {
    return (
      browserify({
        entries: [file],
        debug: true,
        transform: [
          // Apply babel transforms here so that browserify knows how to bundle
          // the files
          babelify.configure({
            presets: ["@babel/preset-env"],
          }),
        ],
      })
        .bundle()
        // Transform the stream content bable bundling returns into a gulp
        // friendly format
        .pipe(source(file))
        // Not sure how fileinclude is used in your project. May be that it
        // doesn't work when it's configured in this way.
        .pipe(fileinclude())
        .pipe(dest("dist/js"))
        .pipe(
          uglify({
            toplevel: true,
          }).on("error", notify.onError())
        )
        .pipe(
          rename({
            extname: ".min.js",
          })
        )
        .pipe(dest("dist/js"))
        .pipe(browserSync.stream())
    );
  });

  return es.merge(tasks).on("end", done);
};

exports.default = changingScripts;

Gulp: Browserify ile birden çok paket oluşturma

2021-11-20 08:39:50

İşe yaradı, teşekkürler!
SineYlo

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................