javascript - 为什么用 webpack 和 babel 编译后会得到 function is not defined?

标签 javascript webpack babeljs

我正在尝试使用 babel 和 webpack 将同时使用 ES6 和 ES5 语法的 javascript 项目编译为 ES5。在这样做的过程中,我不断收到“Uncaught ReferenceError: [function] is not defined”。

我已经在此处和其他网站上研究了该主题,但似乎找不到解决方案。这是我的代码。

测试.js

runTest('hello');

test2.js

function runTest(statement) {
    console.log("test running: ", statement);
}

主要.js

require('./test2');
require('./test');

bundle.js(代码输出到的地方)

!function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){n(1),n(2)},function(e,t){},function(e,t){runTest("hello")}]);

webpack.config.js

const path = require('path');
const webpack = require('webpack');
const webpack_rules = [];
const webpackOption = {
    entry: './Scripts/es6/main.js',
    output: {
        path: path.resolve(__dirname, './Scripts/build'),
        filename: 'bundle.js'
    },
    module: {
        rules: webpack_rules
    }
};

let babelLoader = {
    test: /\.js$/,
    exclude: /(node_modules|bower_components)/,
    use: {
        loader: "babel-loader",
        options: {
            presets: ["@babel/preset-env"]
        }
    }
};
webpack_rules.push(babelLoader);
module.exports = webpackOption;

我知道我的测试代码实际上都不是 ES6 代码。我试图编译的真实代码是 ES5 和 ES6 的混合,那部分似乎编译得很好。我还尝试将 console.log('test') 和 console.log('test2') 添加到每个文件,我可以看到两个日志,所以我知道文件正在编译。

编辑: 鉴于 Quinten 的回应,也许我走错了路。我正在尝试获取我所有的 JavaScript 文件(一些使用 ES5 和一些使用 ES6 语法)并将它们编译成一个 ES5 文件,该文件将在 IE11 和更新的浏览器上运行。我应该做些不同的事情吗?

最佳答案

您似乎认为 require 会从模块中注入(inject)代码来代替 require 语句。它不会,require() 从模块复制导出并返回它们。

所以test2.js需要导出函数,test.js需要导入。这使得拥有第三个文件毫无意义。

main.js

const runTest = require("./test1.js");
runTest('hello');

test1.js

function runTest(statement) {
    console.log("test running: ", statement);
}

module.exports = runTest;

关于javascript - 为什么用 webpack 和 babel 编译后会得到 function is not defined?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56794251/

相关文章:

javascript - Javascript 中的 Google Cloud Function 在函数完成之前完成

javascript - 模态未定义

用于在编译前后修改文件的 Webpack 插件

javascript - 如何使用Jenkins部署网站

javascript - 使用 Babel + grunt 与 ES6 一起工作 - 如何转换 require 语句?

javascript - 追加后访问元素

javascript - 如何访问 sapUI5 聚合绑定(bind)中的迭代索引?

reactjs - 图片: You may need an appropriate loader to handle this file type

webpack - CDN 服务 block 文件

javascript - 使用 babel,如何将一些代码附加到每个文件的顶部?