如何让 bundel.js 直接在首页执行代码?
How to make bundel.js execute code right on home page?
我是 Webpack 世界的新手。我配置了webpack和babel,当我访问http://localhost:8080/dist/bundle.js it runs the code. But it doesn't run the code when I am on http://localhost:8080。
我尝试更改输出路径,再次创建构建,在脚本标记中尝试不同的东西,但看起来它不起作用。
Webpack.config.js
var path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
entry: path.resolve(__dirname, 'src/index.js') ,
output: {
path: path.resolve(__dirname, '/dist'),
filename: 'bundle.js',
publicPath: '/dist/bundle.js'
},
plugins: [
new HtmlWebpackPlugin({
template: __dirname + '/public/index.html',
filename: 'index.html',
inject: 'body'
}), // Generates default index.html
// new HtmlWebpackPlugin({ // Also generate a test.html
// filename: 'test.html',
// template: 'src/assets/test.html'
// })
],
devServer: {
contentBase: "./public",
hot: true
},
module: {
rules: [
{
test: /.js$/,
loader: 'babel-loader',
query: {
presets: ['@babel/react', '@babel/env'],
plugins: ['@babel/proposal-class-properties']
}
}
]
}
};
.babelrc
{
"presets": [
"@babel/preset-env",
“@babel/preset-react”
]
}
package.json
{
"name": "ondemnd-web",
"version": "0.1.0",
"private": true,
"dependencies": {
"babel-core": "7.0.0-bridge.0",
"react": "^16.10.2",
"react-dom": "^16.10.2",
"react-scripts": "3.2.0"
},
"scripts": {
"start": "webpack-dev-server --mode development --open --hot",
"build": "webpack --mode production",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": "react-app"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"@babel/cli": "^7.6.2",
"@babel/core": "^7.6.2",
"@babel/plugin-proposal-class-properties": "^7.5.5",
"@babel/plugin-transform-react-jsx": "^7.3.0",
"@babel/preset-env": "^7.6.2",
"@babel/preset-react": "^7.0.0",
"babel-jest": "^24.9.0",
"babel-loader": "^7.1.5",
"html-webpack-plugin": "^3.2.0",
"regenerator-runtime": "^0.13.3",
"webpack": "^4.41.0",
"webpack-cli": "^3.3.9",
"webpack-dev-server": "^3.8.2"
}
}
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="description"
content="Web site created using create-react-app"
/>
<title>React App</title>
</head>
<body>
<div id="root"><h1>hello, world</h1></div>
<script type="text/babel" src="/dist/bundle.js"></script>
</body>
</html>
index.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
alert('It worksssssssssssssssssssssssssssssssssssssssssssss');
console.log("sjakdskladjlskajdlsdj");
app.js
import React from 'react';
function App() {
return (
<div className="App">
<header className="App-header">
<p>
Edit <code>src/App.js</code> and save to reload.
</p>
<a
className="App-link"
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer"
>
Learn React
</a>
</header>
</div>
);
}
export default App;
此外,即使我 运行 'npm run-script build' 也没有看到生成 dist 文件夹,但我也没有看到正在生成 dist 文件夹。不确定是不是这个原因。
我的项目结构如下所示:
本地服务器 - dist/bundle.js:
本地服务器 - 主页:
看来我漏掉了一块拼图,但想不通是什么!如果您有任何解决此问题的建议,这将非常有帮助。
如果您想在 root 上看到您的应用 运行,您需要将 output.publicPath
设置为 root。
试试这个:
output: {
path: path.resolve(__dirname, '/dist'),
filename: 'bundle.js',
publicPath: '/'
},
您还需要将 devServer.contentBase
设置为您的构建目录:
devServer: {
contentBase: path.resolve(__dirname, '/dist'),
// ...
}
我是 Webpack 世界的新手。我配置了webpack和babel,当我访问http://localhost:8080/dist/bundle.js it runs the code. But it doesn't run the code when I am on http://localhost:8080。
我尝试更改输出路径,再次创建构建,在脚本标记中尝试不同的东西,但看起来它不起作用。
Webpack.config.js
var path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
entry: path.resolve(__dirname, 'src/index.js') ,
output: {
path: path.resolve(__dirname, '/dist'),
filename: 'bundle.js',
publicPath: '/dist/bundle.js'
},
plugins: [
new HtmlWebpackPlugin({
template: __dirname + '/public/index.html',
filename: 'index.html',
inject: 'body'
}), // Generates default index.html
// new HtmlWebpackPlugin({ // Also generate a test.html
// filename: 'test.html',
// template: 'src/assets/test.html'
// })
],
devServer: {
contentBase: "./public",
hot: true
},
module: {
rules: [
{
test: /.js$/,
loader: 'babel-loader',
query: {
presets: ['@babel/react', '@babel/env'],
plugins: ['@babel/proposal-class-properties']
}
}
]
}
};
.babelrc
{ "presets": [ "@babel/preset-env", “@babel/preset-react” ] }
package.json
{
"name": "ondemnd-web",
"version": "0.1.0",
"private": true,
"dependencies": {
"babel-core": "7.0.0-bridge.0",
"react": "^16.10.2",
"react-dom": "^16.10.2",
"react-scripts": "3.2.0"
},
"scripts": {
"start": "webpack-dev-server --mode development --open --hot",
"build": "webpack --mode production",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": "react-app"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": {
"@babel/cli": "^7.6.2",
"@babel/core": "^7.6.2",
"@babel/plugin-proposal-class-properties": "^7.5.5",
"@babel/plugin-transform-react-jsx": "^7.3.0",
"@babel/preset-env": "^7.6.2",
"@babel/preset-react": "^7.0.0",
"babel-jest": "^24.9.0",
"babel-loader": "^7.1.5",
"html-webpack-plugin": "^3.2.0",
"regenerator-runtime": "^0.13.3",
"webpack": "^4.41.0",
"webpack-cli": "^3.3.9",
"webpack-dev-server": "^3.8.2"
}
}
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="description"
content="Web site created using create-react-app"
/>
<title>React App</title>
</head>
<body>
<div id="root"><h1>hello, world</h1></div>
<script type="text/babel" src="/dist/bundle.js"></script>
</body>
</html>
index.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(<App />, document.getElementById('root'));
alert('It worksssssssssssssssssssssssssssssssssssssssssssss');
console.log("sjakdskladjlskajdlsdj");
app.js
import React from 'react';
function App() {
return (
<div className="App">
<header className="App-header">
<p>
Edit <code>src/App.js</code> and save to reload.
</p>
<a
className="App-link"
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer"
>
Learn React
</a>
</header>
</div>
);
}
export default App;
此外,即使我 运行 'npm run-script build' 也没有看到生成 dist 文件夹,但我也没有看到正在生成 dist 文件夹。不确定是不是这个原因。
我的项目结构如下所示:
本地服务器 - dist/bundle.js:
本地服务器 - 主页:
看来我漏掉了一块拼图,但想不通是什么!如果您有任何解决此问题的建议,这将非常有帮助。
如果您想在 root 上看到您的应用 运行,您需要将 output.publicPath
设置为 root。
试试这个:
output: {
path: path.resolve(__dirname, '/dist'),
filename: 'bundle.js',
publicPath: '/'
},
您还需要将 devServer.contentBase
设置为您的构建目录:
devServer: {
contentBase: path.resolve(__dirname, '/dist'),
// ...
}