В моем проекте PHP - я пытаюсь собрать файлы js с помощью webpack и babel. Есть 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.
}
}
],
}
};
Все работает нормально, за исключением того, что когда я добавляю встроенный файл сценария в проект, я получаю следующую ошибку консоли браузера:
Uncaught ReferenceError: require is not defined at Object. (script.bundle.min.js?ver=4.9.8:1) at a (script.bundle.min.js?ver=4.9.8:1) at Object. (script.bundle.min.js?ver=4.9.8:1) at a (script.bundle.min.js?ver=4.9.8:1) at script.bundle.min.js?ver=4.9.8:1 at script.bundle.min.js?ver=4.9.8:1
Я ожидал, что require.js должен решить проблему. Но это не так.
Не могли бы вы предложить мне подходящий способ решения проблемы?
РЕДАКТИРОВАТЬ
Основная идея работы - просто собрать несколько файлов js в одном месте, а также добавить babel, чтобы сделать его дружественным к браузеру, если мне нужно добавить ES6 / ES7.
Мой основной файл js - это script.js, у которого есть две зависимости: config.js и helper.js. Итак, я должен был собрать только script.js, в котором я хотел сохранить файл зависимостей import/require.
Сначала я попытался записать все файлы 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"
}
}
Кроме того, да. Я добавлял встроенный файл js в тег <script>.
КОНЕЦ РЕДАКТИРОВАНИЯ
Заранее спасибо!
@axm__ Спасибо за ваш комментарий. Я обновил свой вопрос.
В вашем package.json упоминается { build: webpack }. Вы действительно запускали npm run build для выполнения команды? Если нет, не могли бы вы сделать это, прежде чем я попытаюсь ответить на вопрос и сообщить мне, каков результат. Команда должна вывести построенный файл по пути вывода, который вы указали в webpack.config.json. Чтобы узнать больше о скриптах npm: michael-kuehnel.de/tooling/2018/03/22/…
@axm__ да, я создал выходной файл js с помощью npm run build. Когда я добавляю выходной файл js и добавляю его в тег <script> в консоли браузера, я получаю сообщение об ошибке require is undefined.
Хорошо, это странно. Как выглядит ваш выходной файл? Вы можете увидеть, есть ли вообще какое-нибудь преобразование?
Да, в выходном файле я вижу, что файл script.js построен идеально, но не создаются другие два файла.
Итак, моя головная боль связана с import/require двумя другими файлами js в файлах script.js. Когда я require файл helper.js в script.js, на самом деле ошибка require is not undefined появляется в консоли.
Это код выше в script.js - const helper = require('./helper');, который не запускает
Ok. Почему вы установили module.parser.node на false? webpack запускается в node и использует разрешение модуля nodejs. что произойдет, если вы измените его на true и requirejs на false
все еще та же проблема
module.parser.node - false, это вариант по умолчанию. Чем я занимался до require другие файлы с require.jsПозвольте нам продолжить обсуждение в чате.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Функция require отсутствует в браузерах, только в средах Node. Взгляните на это.
Сначала вам нужно собрать пакет, чтобы он был понятен браузеру. Ошибка require is not defined указывает на то, что вы находитесь не в среде node (она не была вызвана чем-то вроде node runthiscurrentprogram.js или программой, запускающей для вас node. Подробнее о формате вывода с requireздесь
Webpack - это пакет, который работает в node, который может объединять и / или преобразовывать исходные файлы (может быть javascript, css и т. д.) И размещать их там, где вы хотите. Файл пакетов можно включить в тег <script>, чтобы он был понятен браузеру.
Чтобы запустить веб-пакет, либо запустите npm run build (потому что у вас есть сценарий с именем build в ваших сценариях package.json или npx webpack (подробнее о npxздесь). Это вызывает исполняемый файл webpack в /path_to_your_project/node_modules/.bin/webpack. Если вы откроете этот файл, вы увидите, что он запущен в узле (начинается с #!/usr/bin/env node)
Теперь вы упомянули, что ваш основной файл - это script.js, которому «требуются» эти другие файлы. В этом случае вам нужно только указать script.js в записи веб-пакета. Webpack автоматически объединяет необходимые файлы в пакет. Весь код будет помещен на ваш outputPath в одном файле. (Есть способы / причины иметь несколько записей, но не в вашем случае, я думаю, подробнее здесь).
Итак, запустите npm run webpack, npx webpack и посмотрите на выходной путь, есть ли там новый файл, и включите файл что в тег <script>.
Проблема в том, что файл script.js не может требовать два других файла. Поэтому в console я получаю ошибку. Итак, каков подходящий способ для require двух других js в script.js?
Я пришел к той же ошибке, но вместо webpack я использовал gulp. Babel транспонировал ES6 в ES5, но он не соответствовал заявлениям import и required. Короче говоря, мне помогла библиотека глоток-братан. Вы можете найти пошаговые инструкции в этом Answare.
Как вы «строите»? . Похоже, вы просто включаете скрипт в тег браузера
<script>.requireработает только в средеnode. После процесса сборки преобразованный javascript будет понят браузером. Если вы отредактируете свой ответ, указав, какие шаги сборки вы выполняете, я мог бы изучить его подробнее. кроме того, есть ли в вашемpackage.jsonкакие-нибудь скрипты?