Gulp concat输出一个带有import语句的文件以及带有相同标识符的exports?

nhjlsmyf  于 2022-12-08  发布在  Gulp
关注(0)|答案(1)|浏览(171)

gulpfile.js:

const gulp = require("gulp");
const concat = require("gulp-concat");
const sass = require("gulp-sass")(require("sass"));
const ts = require("gulp-typescript");
const del = require("del");

const outputFolder = "dist";

const cleanWorkload = (cb) => {
  del.sync([outputFolder]);
  cb();
};

/* WORKLOADS */
const scssWorkload = () => gulp.src("src/scss/index.scss").pipe(sass()).pipe(gulp.dest(outputFolder));
const tsWorkload = () =>
  gulp
    .src("src/ts/**/*.ts")
    .pipe(
      ts({
        module: "es6",
        target: "es5",
        lib: ["DOM", "DOM.Iterable", "ESNext"],
      })
    )
    .pipe(concat("tree.js"))
    .pipe(gulp.dest(outputFolder));

/* DEFAULT */
const directCompilation = gulp.parallel(scssWorkload, tsWorkload);
gulp.task("default", gulp.series(cleanWorkload, directCompilation));

/* WATCH */
gulp.task("watch", () => {
  gulp.watch("src/scss/**/*.scss", scssWorkload);
  gulp.watch("src/ts/**/*.ts", tsWorkload);
});

源文件的代码段:

import ElementCreator from "./helpers/ElementCreator";
import Branch from "./types/Branch.interface";
import BranchDescription from "./types/BranchDescription.interface";
import TreeConfig from "./types/TreeConfig.interface";

export default class Tree {
  private $el: HTMLElement;
  private branches: Branch[];
...

问题是,当我运行gulp时,输出文件包含以下内容:

import ElementCreator from "./helpers/ElementCreator";
var Tree = /** @class */ (function () {
    function Tree(config) {
...

var ElementCreator = /** @class */ (function () {
    function ElementCreator() {
    }
...

所以浏览器会抱怨ElementCreator已经被声明了
我如何告诉gulp删除所有这些import语句,因为这些文件无论如何都是连接在一起的?

62lalag4

62lalag41#

在搜索了一段时间后,我找到了一个可行的解决方案:
首先,您需要执行npm i gulp-strip-import-export
其次,重写tsWorkload,如下所示:

const tsWorkload = () =>
  gulp
    .src("src/ts/**/*.ts")
    .pipe(
      ts({
        module: "es6",
        target: "esnext",
        lib: ["DOM", "DOM.Iterable", "ESNext"],
      })
    )
    .pipe(stripImportExport())
    .pipe(babel({ presets: ["@babel/env"] }))
    .pipe(concat("tree.js"))
    .pipe(gulp.dest(outputFolder));

第三,在所有文件中使用export ClassName而不是export default ClassName
通过这样做,您的所有js将被编译到一个文件中,而不存在任何模块系统
在那之后做:

<script src="/dist/tree.js"></script>

而且你写的所有东西都可以随时得到,不需要任何进口

相关问题