【发布时间】:2018-10-01 05:10:25
【问题描述】:
在我的 PHP 项目中 - 我正在尝试使用 webpack 和 babel 构建我的 js 文件。有 3 个 js 文件 - config.js helper.js script.js。他们相互依赖。 helper.js 依赖于config.js,script.js 依赖于helper.js。
config.js:
module.exports = {
const DG_GRAPH_TYPE = 'line';
const DG_XAXIS_TICKS = 4;
const DG_SINGLE_POST_GRAPH_CANVAS_HEIGHT = 250;
......
helper.js:
const config = require('./config');
module.exports = {
......
script.js:
const helper = require('./helper');
jQuery(document).ready(function ($) {
......
这是我使用以下代码配置的wepack.config.js 文件:
const path = require('path');
module.exports = {
entry: {
script: [
'./assets/js/script.js'
]
},
output: {
filename: '[name].bundle.min.js',
path: path.resolve(__dirname, 'build'),
},
resolve: {
extensions: ['.js', '.css']
},
module: {
rules: [
{
test: /\.js/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env'],
plugins: [require('@babel/plugin-proposal-object-rest-spread')]
}
},
parser: {
amd: false, // disable AMD
commonjs: false, // disable CommonJS
system: false, // disable SystemJS
harmony: true, // disable ES2015 Harmony import/export
requireInclude: false, // disable require.include
requireEnsure: false, // disable require.ensure
requireContext: false, // disable require.context
browserify: true, // disable special handling of Browserify bundles
requireJs: true, // disable requirejs.*
node: false, // disable __dirname, __filename, module, require.extensions, require.main, etc.
}
}
],
}
};
一切正常,除非我在项目中添加构建的脚本文件,我得到以下浏览器控制台错误 -
未捕获的 ReferenceError: 未在 Object 中定义 require。 (script.bundle.min.js?ver=4.9.8:1) 在 (script.bundle.min.js?ver=4.9.8:1) 在对象。 (script.bundle.min.js?ver=4.9.8:1) 在 (script.bundle.min.js?ver=4.9.8:1) 在 script.bundle.min.js?ver=4.9.8:1 在 script.bundle.min.js?ver=4.9.8:1
我所期待的 require.js 应该可以解决问题。但事实并非如此。
您能否建议我解决问题的适当方法?
编辑
这项工作的主要概念是在一个地方构建多个 js 文件,如果我必须添加 ES6/ES7,还添加 babel 以使其浏览器友好。
我的主要js 文件是script.js,它有两个依赖项config.js 和helper.js。所以,我只在我想在那里构建import/require 依赖文件的地方构建script.js。
起初我尝试输入所有js 文件,但我得到的所有script.js 都不是其他人构建的。 -
entry: {
script: [
'./assets/js/config.js'
'./assets/js/helper.js'
'./assets/js/script.js'
]
},
这里是package.json -
{
"name": "GRAPH",
"version": "1.0.0",
"description": "Graph plugin",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "webpack"
},
"author": "ABC",
"license": "ISC",
"devDependencies": {
"@babel/core": "^7.1.0",
"@babel/polyfill": "^7.0.0",
"@babel/preset-env": "^7.1.0",
"babel-loader": "^8.0.4",
"jquery": "^3.3.1",
"mini-css-extract-plugin": "^0.4.3",
"requirejs": "^2.3.6",
"webpack": "^4.20.2",
"webpack-cli": "^3.1.1",
"webpack-dev-server": "^3.1.9"
}
}
另外,是的。我在<script> 标签中添加了构建的js 文件。
结束编辑
提前致谢!
【问题讨论】:
-
你是如何“建设”的? .看起来您只是将脚本包含在浏览器的
<script>标记中。require仅适用于node环境。在构建过程之后,转换后的 javascript 将被浏览器理解。如果您编辑答案以包含您正在运行的构建步骤,我可以进一步研究它。另外,您的package.json中是否有任何脚本? -
@axm__ 感谢您的评论。我更新了我的问题。
-
您的
package.json提到了{ build: webpack }。你真的运行npm run build来运行命令吗?如果没有,您能否在我尝试回答问题并告诉我输出是什么之前这样做。该命令应该将构建的文件输出到您在webpack.config.json中提到的输出路径。阅读更多关于 npm 脚本的信息:michael-kuehnel.de/tooling/2018/03/22/… -
@axm__ 是的,我使用
npm run build构建了输出js文件。当我添加输出js文件并将其添加到浏览器控制台中的<script>标记时,我收到错误require is undefined。 -
好吧,这很奇怪。你的输出文件是什么样子的?你能看看是否有任何转换吗?
标签: javascript webpack requirejs babeljs