{"id":25344398,"url":"https://github.com/kszitt/next-oss","last_synced_at":"2025-10-29T13:31:28.876Z","repository":{"id":100400706,"uuid":"173237302","full_name":"kszitt/next-oss","owner":"kszitt","description":"webpack打包文件上传到OSS","archived":false,"fork":false,"pushed_at":"2020-04-18T07:40:55.000Z","size":47,"stargazers_count":18,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-03T12:48:42.528Z","etag":null,"topics":["build","cdn","next-oss","next-upload-oss","nextjs","oss","webpack"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kszitt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-03-01T04:57:25.000Z","updated_at":"2020-04-18T07:40:58.000Z","dependencies_parsed_at":"2023-05-14T10:15:07.765Z","dependency_job_id":null,"html_url":"https://github.com/kszitt/next-oss","commit_stats":{"total_commits":35,"total_committers":1,"mean_commits":35.0,"dds":0.0,"last_synced_commit":"0e7590d3e640c92f39977b5aa05cd3b3e29c26f4"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kszitt%2Fnext-oss","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kszitt%2Fnext-oss/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kszitt%2Fnext-oss/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kszitt%2Fnext-oss/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kszitt","download_url":"https://codeload.github.com/kszitt/next-oss/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238813383,"owners_count":19534956,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["build","cdn","next-oss","next-upload-oss","nextjs","oss","webpack"],"created_at":"2025-02-14T11:28:03.414Z","updated_at":"2025-10-29T13:31:28.552Z","avatar_url":"https://github.com/kszitt.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"## 声明\n目前，`next-oss`包已经不在维护。请`webpack`项目使用[hsuc](https://github.com/kszitt/hsuc); `next`项目请使用[next-hsuc](https://github.com/kszitt/next-hsuc)\n\n## 描述\n将webpack打包生成的文件上传到OSS，以提高加载速度   \n目前，支持阿里云、华为云、七牛和又拍云。 \n\n## 安装\n```bash\nnpm install next-oss --save-dev\n```\n\n## 要求\n### Node\nNode.js \u003e= 10.10.0 required\n\n## 非`next`框架\n#### 添加命令\n```bash\n// package.json\n{\n  \"OSSDomainName\": \"\u003c云端域名\u003e\",\n  \"OSSFolder\": \"\u003c云端文件夹\u003e\",\n  \"OSSProduction\": \u003c:boolean\u003e, // 生产模式是否使用OSS\n  \"scripts\": {\n    \"build\": \"cross-env NODE_ENV=production webpack\",  // cross-env 请自行安装\n  }\n}\n```\n#### webpack配置文件\n```bash\n// webpack.config.js\nconst NextOss = require('next-oss');\n\n...\nplugins: [\n  ...\n  new NextOss({\n    disable: process.env.NODE_ENV !== \"production\",\n    upyun: {\n      serviceName: \"\u003cservice name\u003e\",\n      operatorName: \"\u003coperator name\u003e\",\n      operatorPassword: \"\u003coperator password\u003e\",\n    },\n    qiniu: {\n      accessKey: \"\u003cACCESS_KEY\u003e\",\n      secretKey: \"\u003cSECRET_KEY\u003e\",\n      bucket: \"\u003cBucket\u003e\"\n    },\n    huawei: {\n      accessKeyId: \"\u003cProvide your Access Key\u003e\",\n      secretAccessKey: \"\u003cProvide your Secret Key\u003e\",\n      server: \"\u003chttps://your-endpoint\u003e\",\n      bucket: \"\u003cBucket\u003e\"\n    },\n    aliyun: {\n      region: \"\u003cOSS region\u003e\",\n      accessKeyId: \"\u003cYour accessKeyId\u003e\",\n      accessKeySecret: \"\u003cYour accessKeySecret\u003e\",\n      bucket: \"\u003cYour bucket name\u003e\"\n    }\n  })\n]\n```\n#### 部署\n``` hash\nnpm run build\n// 将打包文件夹下的index.html文件部署到服务器，确保能访问到\n```\n## `next`框架\n#### 添加命令\n```bash\n// package.json\n{\n  \"OSSDomainName\": \"\u003c云端域名\u003e\",\n  \"OSSFolder\": \"\u003c云端文件夹\u003e\",\n  \"OSSProduction\": \u003c:boolean\u003e, // 生产模式是否使用OSS\n  \"scripts\": {\n    \"build\": \"cross-env NODE_ENV=production next build\",  // 打包命令（cross-env 请自行安装）\n    \"start\": \"cross-env NODE_ENV=production node server.js\"   // 启动服务（这里不能用next start，得自定义服务端）\n  }\n}\n```\n#### 自定义服务端\n```bash\n// server.js\nconst express = require('express');\nconst next = require('next');\nconst {OSSFolder, OSSDomainName, OSSProduction} = require('./package.json');\nconst { NODE_ENV, PORT=3000 } = process.env;\nconst dev = NODE_ENV !== 'production';\nconst Prod = NODE_ENV === \"production\";\nconst app = next({dir: '.', dev});\n\n// 是否使用OSS（只有生产模式可以使用OSS，开发模式无效）\nif(Prod ? OSSProduction : false){\n  app.setAssetPrefix(`${OSSDomainName}/${OSSFolder}/`);\n}\n\napp.prepare().then(() =\u003e {\n    const server = express();\n\n    server.listen(PORT, (err) =\u003e {\n      if (err) {\n        throw err\n      }\n      console.log(`\u003e Ready on port ${PORT} [${NODE_ENV}]`);\n    })\n  }).catch((ex) =\u003e {\n    console.log('An error occurred, unable to start the server')\n    console.log(ex)\n  });\n```\n#### webpack配置\n```bash\n// next.config.js\nconst NextOss = require('next-oss');\nconst {OSSFolder, OSSDomainName, OSSProduction} = require('./package.json');\nconst withPlugins = require (\"next-compose-plugins\");\nconst { NODE_ENV } = process.env;\nconst Prod = NODE_ENV === \"production\";\n\n...\nconst nextConfig = {\n  webpack: (config, options) =\u003e {\n    ...\n    let NextOssOptions = {\n      disable: Prod ? !OSSProduction : true,  // 只有生产模式可以使用OSS，开发模式无效\n      upyun: {\n        serviceName: \"\u003cservice name\u003e\",\n        operatorName: \"\u003coperator name\u003e\",\n        operatorPassword: \"\u003coperator password\u003e\",\n      },\n      qiniu: {\n        accessKey: \"\u003cACCESS_KEY\u003e\",\n        secretKey: \"\u003cSECRET_KEY\u003e\",\n        bucket: \"\u003cBucket\u003e\"\n      },\n      huawei: {\n        accessKeyId: \"\u003cProvide your Access Key\u003e\",\n        secretAccessKey: \"\u003cProvide your Secret Key\u003e\",\n        server: \"\u003chttps://your-endpoint\u003e\",\n        bucket: \"\u003cBucket\u003e\"\n      },\n      aliyun: {\n        region: \"\u003cOSS region\u003e\",\n        accessKeyId: \"\u003cYour accessKeyId\u003e\",\n        accessKeySecret: \"\u003cYour accessKeySecret\u003e\",\n        bucket: \"\u003cYour bucket name\u003e\"\n      }\n    };\n    if(!NextOssOptions.disable) options.config.assetPrefix = `${OSSDomainName}/\"${OSSFolder}/`;\n    config.plugins.push(\n      new NextOss(NextOssOptions)\n    );\n\n    return config;\n  }\n};\n\nmodule.exports = withPlugins([...], nextConfig);\n```\n#### 部署\n``` hash\nnpm run build\nnpm run start\n```\n\n## NextOSS(options)支持的选项\n- `aliyun` - 初始化阿里云OSS。\n- `huawei` - 初始化华为云OBS。\n- `qiniu` - 初始化七牛。\n- `upyun` - 初始化又拍云。\n- `disable` - 是否禁用，默认`false`。\n- `deletePrevBuildFile` - 是否删除云端以前的版本，默认`false`\n- `log` - 是否显示日志，默认`true`\n- `cover` - 图片、字体文件是否覆盖，默认`true`。\n\n## 对象存储CORS规则设置\n- `huawei` 按照[配置桶的CORS](https://support.huaweicloud.com/sdk-browserjs-devg-obs/zh-cn_topic_0181364988.html)中“通过OBS Browser配置桶的CORS”设置\n- `aliyun` 按照[设置CORS](https://help.aliyun.com/document_detail/44570.html?spm=5176.8465980.0.0.12871450vh6n2z)设置CORS\n- `qiniu` 按照[CORS 跨域共享](https://console.upyun.com/services/kszitt/antileechFile/)设置\n\n## 注意事项\n- \u003clabel style=\"color:red\"\u003e云端访问权限请设置为“公共读写”或者“公共读”\u003c/label\u003e\n- `options`参数中`aliyun`、`huawei`、`qiniu`和`upyun`同时配置只有第一个有效\n- `options.disable` 该插件在非生产模式禁用，生产模式可以在`package.json`中的`OSSProduction`设置是否禁用。\n- `options.deletePrevBuildFile` 启用该项会把以前的版本删掉，建议在服务器定期清理。\n- `options.cover` \u003clabel style=\"color:red\"\u003e设置为`false`不覆盖时，请将图片、字体的文件名添加[hash]值。否则，会找不到资源\u003c/label\u003e\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkszitt%2Fnext-oss","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkszitt%2Fnext-oss","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkszitt%2Fnext-oss/lists"}