博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
react 从零开始搭建开发环境
阅读量:6329 次
发布时间:2019-06-22

本文共 7509 字,大约阅读时间需要 25 分钟。

1.创建 package.json 项目

npm init

2.安装 webpack, 并且设置为项目依赖:

npm install webpack --save-dev

当然你必须之前已经在 -g 下安装了 webpack

3.创建一个 webpack.config.js 文件,这个文件是 webpack 工作的参考。

我们对着 https://webpack.js.org/configuration/ 这个文档来创建 webpack.config.js 文件。

webpack.config.js 文件:

const path = require('path');module.exports = {  entry: "./app/entry", // string | object | array  // Here the application starts executing  // and webpack starts bundling  output: {    // options related to how webpack emits results    path: path.resolve(__dirname, "dist"), // string    // the target directory for all output files    // must be an absolute path (use the Node.js path module)    filename: "bundle.js", // string    // the filename template for entry chunks    publicPath: "/assets/", // string    // the url to the output directory resolved relative to the HTML page    library: "MyLibrary", // string,    // the name of the exported library    libraryTarget: "umd", // universal module definition    // the type of the exported library    /* Advanced output configuration (click to show) */  },  module: {    // configuration regarding modules    rules: [      // rules for modules (configure loaders, parser options, etc.)      {        test: /\.jsx?$/,        include: [          path.resolve(__dirname, "app")        ],        exclude: [          path.resolve(__dirname, "app/demo-files")        ],        // these are matching conditions, each accepting a regular expression or string        // test and include have the same behavior, both must be matched        // exclude must not be matched (takes preferrence over test and include)        // Best practices:        // - Use RegExp only in test and for filename matching        // - Use arrays of absolute paths in include and exclude        // - Try to avoid exclude and prefer include        issuer: { test, include, exclude },        // conditions for the issuer (the origin of the import)        enforce: "pre",        enforce: "post",        // flags to apply these rules, even if they are overridden (advanced option)        loader: "babel-loader",        // the loader which should be applied, it'll be resolved relative to the context        // -loader suffix is no longer optional in webpack2 for clarity reasons        // see webpack 1 upgrade guide        options: {          presets: ["es2015"]        },        // options for the loader      },      {        test: /\.html$/,        use: [          // apply multiple loaders and options          "htmllint-loader",          {            loader: "html-loader",            options: {              /* ... */            }          }        ]      },      { oneOf: [ /* rules */ ] },      // only use one of these nested rules      { rules: [ /* rules */ ] },      // use all of these nested rules (combine with conditions to be useful)      { resource: { and: [ /* conditions */ ] } },      // matches only if all conditions are matched      { resource: { or: [ /* conditions */ ] } },      { resource: [ /* conditions */ ] },      // matches if any condition is matched (default for arrays)      { resource: { not: /* condition */ } }      // matches if the condition is not matched    ],    /* Advanced module configuration (click to show) */  },  resolve: {    // options for resolving module requests    // (does not apply to resolving to loaders)    modules: [      "node_modules",      path.resolve(__dirname, "app")    ],    // directories where to look for modules    extensions: [".js", ".json", ".jsx", ".css"],    // extensions that are used    alias: {      // a list of module name aliases      "module": "new-module",      // alias "module" -> "new-module" and "module/path/file" -> "new-module/path/file"      "only-module$": "new-module",      // alias "only-module" -> "new-module", but not "only-module/path/file" -> "new-module/path/file"      "module": path.resolve(__dirname, "app/third/module.js"),      // alias "module" -> "./app/third/module.js" and "module/file" results in error      // modules aliases are imported relative to the current context    },    /* alternative alias syntax (click to show) */    /* Advanced resolve configuration (click to show) */  },  performance: {    hints: "warning", // enum    maxAssetSize: 200000, // int (in bytes),    maxEntrypointSize: 400000, // int (in bytes)    assetFilter: function(assetFilename) {      // Function predicate that provides asset filenames      return assetFilename.endsWith('.css') || assetFilename.endsWith('.js');    }  },  devtool: "source-map", // enum  // enhance debugging by adding meta info for the browser devtools  // source-map most detailed at the expense of build speed.  context: __dirname, // string (absolute path!)  // the home directory for webpack  // the entry and module.rules.loader option  //   is resolved relative to this directory  target: "web", // enum  // the environment in which the bundle should run  // changes chunk loading behavior and available modules  externals: ["react", /^@angular\//],  // Don't follow/bundle these modules, but request them at runtime from the environment  stats: "errors-only",  // lets you precisely control what bundle information gets displayed  devServer: {    proxy: { // proxy URLs to backend development server      '/api': 'http://localhost:3000'    },    contentBase: path.join(__dirname, 'public'), // boolean | string | array, static file location    compress: true, // enable gzip compression    historyApiFallback: true, // true for index.html upon 404, object for multiple paths    hot: true, // hot module replacement. Depends on HotModuleReplacementPlugin    https: false, // true for self-signed, object for cert authority    noInfo: true, // only errors & warns on hot reload    // ...  },  plugins: [    // ...  ],  // list of additional plugins  /* Advanced configuration (click to show) */}

实例:

const path = require('path');module.exports = {  // 入口文件  entry: "./app/main.js",  // 出口文件  output: {    path: path.resolve(__dirname, "dist"), // string    filename: "all.js" // string  }}

至此,我们的 webpack 就已经可以进行标准的 CMD 模块化开发了。

4.我们引入 babel-loader 翻译 ES6:

npm install --save-dev babel-loadernpm install --save-dev babel-corenpm install --save-dev babel-preset-es2015

我们参考 https://github.com/babel/babel-loader 改变 webpack.config.js 文件:

const path = require('path');module.exports = {  // 入口文件  entry: "./app/main.js",  // 出口文件  output: {    path: path.resolve(__dirname, "dist"), // string    filename: "all.js" // string  },  module: {    rules: [      {        test: /\.js$/,        exclude: /(node_modules|bower_components)/,        use: {          loader: 'babel-loader',          options: {            presets: ['es2015']          }        }      }    ]  }}

友情提醒:webpack1 和 2 在配置上差别最大的就是 loader 的书写方法。

module  -->  rules  -->  test / exclude / use 属性,这是标准的 webpack2 的写法。

5.此时运行

webpack

命令,将自动的使用 CMD 构建 app 文件夹中的 main.js 文件,并且使用 babel 翻译。

6.下面继续配置 react:

npm install --save-dev reactnpm install --save-dev react-dom

配置 解析 JSX 语法:

npm install --save-dev babel-preset-react

至此,我们已经配置完毕 react 起步的所有的依赖,我们目前的 package.json 文件:

{  "name": "01_helloworld",  "version": "1.0.0",  "description": "",  "main": "index.js",  "scripts": {    "test": "echo \"Error: no test specified\" && exit 1"  },  "author": "",  "license": "ISC",  "devDependencies": {    "babel-core": "^6.26.0",    "babel-loader": "^7.1.2",    "babel-preset-es2015": "^6.24.1",    "babel-preset-react": "^6.24.1",    "react": "^16.2.0",    "react-dom": "^16.2.0",    "webpack": "^2.4.1"  }}

.

转载地址:http://ipfoa.baihongyu.com/

你可能感兴趣的文章
SQL Server vNext CTP1 on Linux
查看>>
1-为 Lync Server 2010 准备 Active Directory 域服务
查看>>
SELinux安全
查看>>
NetBackup下ORACLE恢复测试方案实例解析
查看>>
【有奖征文】“失业”程序员的苦辣酸甜
查看>>
IE9是如何被FireFox4超越全球市场份额的?
查看>>
linux bunzip2命令
查看>>
敏捷个人:通过实践TOGAF来思考如何学习并应用新的方法?
查看>>
Android系统的开机画面显示过程分析(6)
查看>>
vivo Hi-Fi+QQ音乐 数字音乐市场的一剂良方
查看>>
Cocos2d-x 3.2 异步动态加载 -- 保卫萝卜开发总结
查看>>
聚焦触宝反侵权事件:中国创业者用什么护航海外市场大门
查看>>
AOP技术基础
查看>>
Android系统进程间通信(IPC)机制Binder中的Server启动过程源代码分析(2)
查看>>
Lync 小技巧-5-当前已暂停共享
查看>>
无线802.11n 2.4G与5G性能测试
查看>>
子域名信息收集攻略
查看>>
[Android]开发数独游戏思路分析过程
查看>>
SpreadJS 类Excel表格控件 - V12 新特性详解
查看>>
理解并取证:IPv6与IPv4在报文结构上的区别
查看>>