看如图上面bundle.js,我在项目中和配置文件中都没有找到这个JS文件,然后我就觉得很诧异,然后各种查找,终于找到一篇文章,在此记录一下

第一步:npm run start
             我们 一开始这么启动服务 运行项目
             打开你的my-app\package.json

"scripts": {
"start": "react-scripts start",
...
}

所以执行的是 react-scripts start 
打开你的my-app\node_modules\react-scripts这个文件夹下的bin文件夹下的react-scripts.js文件

#!/usr/bin/env node
var spawn = require('cross-spawn');
var script = process.argv[2];
var args = process.argv.slice(3); switch (script) {
case 'build':
case 'eject':
case 'start':
case 'test':
var result = spawn.sync(
'node',
[require.resolve('../scripts/' + script)].concat(args),
.......

上面代码中  script 的变量值是 start
所以执行 my-app\node_modules\react-scripts\scripts 文件夹下的  start.js 文件代码节选重点如下

var webpack = require('webpack');
var WebpackDevServer = require('webpack-dev-server'); // 启动http服务器
var paths = require('../config/paths'); //要编译的文件路径与生成路径等
var config = require('../config/webpack.config.dev');
var DEFAULT_PORT = parseInt(process.env.PORT, 10) || 3000; //这就是为什么 端口号 不是8080 而是 3000 的原因,在这里可以改成8080,重新npm run start 生效
detect(DEFAULT_PORT).then(port => {
if (port === DEFAULT_PORT) {
run(port); //这里开始运行
return;
}
...... function run(port) {
// 这里可以设置 http协议, 或者可以在 npm run start 之前 cmd命令窗口中执行 set HTTPS=true&&npm start 改成https 安全协议
var protocol = process.env.HTTPS === 'true' ? "https" : "http";
var host = process.env.HOST || 'localhost';
setupCompiler(host, port, protocol); // 编译源码 ,生成路径
runDevServer(host, port, protocol); //启动 http服务器
} //配置http服务器
function runDevServer(host, port, protocol) {
var devServer = new WebpackDevServer(compiler, {
compress: true,
clientLogLevel: 'none',
contentBase: paths.appPublic, //根据导入的paths 指定应用根目录(即index.html所在目录)
hot: true, publicPath: config.output.publicPath, //根据导入的 config 变量,指定 虚拟目录,自动指向path编译目录(/assets/ => /build/js/)。html中引用js文件时,
//必须引用此虚拟路径(但实际上引用的是内存中的文件,既不是/build/js/也不是/assets/)。 quiet: true, watchOptions: {
ignored: /node_modules/
},
// Enable HTTPS if the HTTPS environment variable is set to 'true'
https: protocol === "https",
host: host
});
/**
* 省略其他代码
*/
openBrowser(protocol + '://' + host + ':' + port + '/'); // 打开浏览器 向服务器发送请求
});
} function setupCompiler(host, port, protocol) { compiler = webpack(config, handleCompile); // 根据导入的 config 变量 指向的 webpack.config.dev 配置文件 运行
/**
* 省略其他代码
*/
}

start.js 文件代码 中 导入了  my-app\node_modules\react-scripts\config文件夹下的  webpack.config.dev.js 与 paths.js
paths.js  代码节选如下:

var appDirectory = fs.realpathSync(process.cwd());   // 获取npm run start 运行所在的路径
function resolveApp(relativePath) {
return path.resolve(appDirectory, relativePath);
} module.exports = {
appPath: resolveApp('.'),
ownPath: resolveApp('node_modules/react-scripts'),
appBuild: resolveApp('build'),
appPublic: resolveApp('public'),
appHtml: resolveApp('public/index.html'), // 这就是 一开始 我们的项目 要使用public/index.html作为 默认首页
// 这里写什么文件名,项目中就要使用什么文件名 包括 也要有public文件夹
appIndexJs: resolveApp('src/index.js'), //编译的入口文件的文件名 项目中要包括src文件夹
appPackageJson: resolveApp('package.json'),
appSrc: resolveApp('src'),
yarnLockFile: resolveApp('yarn.lock'),
testsSetup: resolveApp('src/setupTests.js'),
appNodeModules: resolveApp('node_modules'),
// this is empty with npm3 but node resolution searches higher anyway:
ownNodeModules: resolveOwn('node_modules'),
nodePaths: nodePaths,
publicUrl: getPublicUrl(resolveApp('package.json')),
servedPath: getServedPath(resolveApp('package.json'))
};
/**
* 省略其他代码
*/

webpack.config.dev.js  代码节选如下:

var paths = require('./paths');  //也导入了 同文件夹下的 paths.js
module.exports = { entry: [ require.resolve('react-dev-utils/webpackHotDevClient'), require.resolve('./polyfills'), paths.appIndexJs // 编译的入口文件 ], output: { path: paths.appBuild, pathinfo: true, filename: 'static/js/bundle.js', // 只是编译后生成的目标文件 ,这就是一开始我们 打开浏览器按f12看到的index.html导入的 // <script type="text/javascript" src="/static/js/bundle.js"></script> publicPath: publicPath },
/**
* 省略其他代码
*/ }

  

最新文章

  1. 关于MySQL密码你应该知道的那些事
  2. js实现上下滑动侧边栏
  3. Javascript写入txt和读取txt文件示例
  4. python 练习 9
  5. RMAN备份与恢复之DataBase
  6. 几款jQuery右键菜单插件
  7. Hibernate逍遥游记-第6章 通过Hibernate操纵对象(select-before-update)
  8. tinyMCE自定义添加图片插件
  9. 数论/the first wave
  10. 第二章 Qt常用工具的介绍
  11. PHP漏洞全解(七)-Session劫持
  12. 极简AWR报告收集指导
  13. (转) c++ 迭代器
  14. javascript第四课变量作用域
  15. 【Linux探索之旅】第二部分第三课:文件和目录,组织不会亏待你
  16. android资源文件的选取
  17. 在MAC上安装GitHub DeskTop
  18. Eclipse / Intellij Idea配置Git+Maven+Jetty开发环境
  19. 重定向和servlet生命周期
  20. 瓦片切图工具gdal2tiles.py改写为纯c++版本

热门文章

  1. Winfrom传值 分类: C# 2015-07-22 15:41 1人阅读 评论(0) 收藏
  2. CHEVP算法(Canny/Hough Estimation of Vanishing Points)
  3. mysql 8.0.15忘记密码重置方法
  4. Can't determine basedir from my_print_defaults mysqld
  5. 【转】 关于form与表单提交操作的一切
  6. shell变量的声明和使用
  7. 前端学习(三十五)模块化es6(笔记)
  8. 【python实例】判断是否是回文数
  9. Halo(十三)
  10. 重写UIlabel的setText:方法,过滤或者拦截text设置