我正在尝试使用babel和webpack将同时使用ES6和ES5语法的JavaScript项目编译为ES5。这样做时,我不断收到“ Uncaught ReferenceError:[函数]未定义”。
我已经在这里和其他站点上研究了该主题,但似乎找不到解决方案。这是我的代码。
test.js
runTest('hello');
test2.js
function runTest(statement) {
console.log("test running: ", statement);
}
main.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和更高版本的浏览器上使用。我应该做些其他事情吗?
答案 0 :(得分:1)
您似乎认为require
将代替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;