Skip to content

package

webpack babel package.json 配置

package.json

1、创建 package.json

npm init

2、设置包

"script": {
  "dev": "",
  "dist": "",
  "pub": "npm run dist",
  "start": "cross-env NODE_ENV=development node ./tools/script.js",
  "test": "node ./test",
  "test": "jest --env=node --colors --coverage"
}

在一个字段中可以运行另一个字段

bin: 用于存放内部命令对应的可执行文件的位置。如果一部分包是全局设置,那么需要找到全局的文件位置。

"bin": {
  "myCommand": "./bin/index.js"
}

myCommand 对应着可执行文件是./bin/index.js。

安装包时,会在node_modules/.bin 下面建立链接。

bin字段在当前seafile项目中使用不是很多

Main: 指定入口文件,默认是根目录下的index.js

  "main": "dist/editor/seafile-editor.js"

入口文件设置成 seafile-editor

config 设置环境变量

"config": {
  "port": "8080"
}
// index.js
http.createServer(...).listen(process.env.npm_package_config_port)

dependencies 项目运行依赖的包(run)

devDependencies 项目开发依赖的包(build)

webpack

常见的webpack配置

var path = require('path');
var webpack = require('webpack');
var HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
  mode: 'development',
  entry: {
    main: path.join(__dirname, './src/pages/Main/index'),
    article: path.join(__dirname, './src/pages/Article/index')
  },
  output: {
    path: path.join(__dirname, './dist'),
    filename: '[name].min.js'
  },
  module: {
    rules: [
      {
        test: /\.jsx?$/,
        exclude: /node_modules/,
        loader: 'babel-loader'
      },
      {
        test: /\.less$/,
        loader: 'style-loader!css-loader!less-loader'
      },
      {
        test: /\.(png|jpg|gif)$/,
        use: [
          {
            loader: 'file-loader',
            options: {}
          }
        ]
      }
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({
      filename: 'index.html',
      template: path.join(__dirname, './index.html'),
      chunks: ['main']
    }),
    new HtmlWebpackPlugin({
      filename: 'article.html',
      template: path.join(__dirname, './index.html'),
      chunks: ['article']
    })
  ],
  resolve: {
    extensions: ['.js', '.jsx'],
  },
  externals: {
    "react": 'React',
    'react-dom': 'ReactDOM'
  }
}

入口函数 entry

webpack 应该使用什么模块;进入入口起点后,webpack 会找出依赖的模块或者库。通常使用对象写法配置 entry。

entry: {
  main: path.join(_dirname, './src/pages/main/index'),
  article: path.join(_dirname, './src/pages/hello/index')
} 

出口函数 output

告诉 webpack 输出包的位置(bundles)以及输出文件的命名;默认路径是 ./dist 。这里表示在 ./dist 下生成 main.min.js.

output: {
  path: path.join(_dirname, './dist'),
  filename: '[name].min.js'
}

模块 module

webpack 通过loader支持各种语言和预处理器的编写模块。配置loader来支持其他文件(例如css/image,支持 jsx或者 vue文件)。

使用 react jsx babel less 等需要配置不同的插件。

例如 ES6 babel

Babel-preset-react 对应react中的ES6

babel 在不同浏览器支持不同,需要转义, babel-preset-react

npm install babel-preset-env babel-preset-react --save-dev
{
  "presents": ['env', 'react']
}

插件 plugins

插件是webpack的核心功能,可以设置各种高级配置。

Html-webpack-plugin 插件:在 webpack构建中,在对应的目录下生成 html 文件,可以正确的引入 webpack 生成的文件。

外部扩展 externals

React react-dom 这部分内容不需要包含在项目中。


Last update: March 26, 2024