繁体   English   中英

无法从已经“必需”的模块内部要求()

[英]Unable to require() from inside an already “required” module

我有这个项目结构:

myApp
├── gulpfile.js
├── package.json
└── source
    └── scripts
        ├── modules
        │   └── utils.js
        ├── background.js
        └── data.json

我的browserify任务:

gulp.task('browserify', function () {
  return gulp.src(['./source/scripts/**/*.js'])
   .pipe($.browserify({
      debug: true,//for source maps
      standalone: pkg['export-symbol']
   }))
   .on('error', function(err){
      console.log(err.message);
      this.emit('end');
    })
   .pipe(gulp.dest('./build/scripts/'));
});

我的示例utils.js

const data = require('../data.json');

const utils = (function () {
  const output = function () {
    console.log(data);
  };

  return {
    output: output,
  };
}());

module.exports = utils;

如果我尝试使用当前目录结构构建它,我会收到此错误:

从“/dev/myApp/source/scripts/fake_4d8cf8a4.js”找不到模块“../data.json”

我只能构建它,如果我把data.json放在modules目录scripts目录里面,即。 它只有在我复制文件时才有效:

myApp
├── gulpfile.js
├── package.json
└── source
    └── scripts
        ├── modules
        │   ├── utils.js
        │   └── data.json
        ├── background.js
        └── data.json

显然这不行......我做错了什么?

谢谢

我推断你使用gulp.src将文件传递给$.browerify ,你使用的是Gulp插件,可能是gulp-browserify 通常不建议使用插件从Gulp调用Browserify。 建议的方法是直接调用Browserify。 事实上,Gulp的插件黑名单表明:

"gulp-browserify": "use the browserify module directly",

我已经复制了你的目录结构并为你没有提供内容的文件( data.jsonbackground.js )添加了一些合理的值,事实上,当我尝试运行Gulp代码时,我得到了同样的错误节目。 但是,如果我切换到直接调用Browserify,我不会收到任何错误。 这是我的代码:

const gulp = require("gulp");
const browserify = require("browserify");
const source = require('vinyl-source-stream');

gulp.task('browserify', function () {
  return browserify({
    entries: ["./source/scripts/background.js",
              "./source/scripts/modules/utils.js"],
    debug: true,//for source maps
    standalone: "foo",
  })
  .bundle()
  .pipe(source('bundle.js')) // This sets the name of the output file.
  .pipe(gulp.dest('./build/scripts/'));
});

您在代码中使用gulp.src(['./source/scripts/**/*.js']) .js gulp.src(['./source/scripts/**/*.js']) ,这意味着Browserify会将所有.js文件作为条目包含在捆绑包中。 所以我在上面的代码中放了两个条目,它们手动复制你使用插件的模式。 但是 ,虽然Browserify不会在此设置中产生错误,但我怀疑您实际上并不想拥有多个条目。 通常,我们将一个入口点传递给Browserify,让它跟踪require调用以确定它需要提取的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM