• 在学react时候找不到static/js/bundle.js


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

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

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

    所以执行的是 react-scripts start 
    打开你的my-app ode_modules eact-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 ode_modules eact-scriptsscripts 文件夹下的  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 ode_modules eact-scriptsconfig文件夹下的  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  },
     /**
       * 省略其他代码
       */
     
    }

      

  • 相关阅读:
    api1
    录像时调用MediaRecorder的start()时发生start failed: -19错误
    继承AppCompatActivity的Activity隐藏标题栏
    Android 6.0 运行时权限处理完全解析
    Android开发用过的十大框架
    Lite Your Android English
    2015最流行的Android组件、工具、框架大全
    C#调用C++函数入口点的问题 z
    C#调用C++的DLL函数另一则(delegate) z
    C#调用C++编写的DLL函数, 以及各种类型的参数传递 z
  • 原文地址:https://www.cnblogs.com/binmengxue/p/9290188.html
Copyright © 2020-2023  润新知